Socket编程
1、基本介绍
Socket 英文原意为“插座”
Socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄
应用程序通常通过“套接字”向网络发出请求或者应答网络要求
2、Scoket基本通信模型
ServerSocket ______________________________________包括TCP和UDP的server端
package com.example.socket_server;
import java.io.InputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.ServerSocket;
import java.net.Socket;
import android.app.Activity;
import android.database.MergeCursor;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class SocketServerActivity extends Activity {
private Button start_socket;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_socket_server);
//Start UI
start_socket = (Button)findViewById(R.id.socketserver);
start_socket.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
new ServerThread().start();
}
});
}
//TCP
/*class ServerThread extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
ServerSocket mServerSocket = null;
try{
//创建一个ServerSocket 并让socket在 1234 端口监听
mServerSocket = new ServerSocket(1234);
Log.d("myDebug", "Now waiting serverScoket.accept() !");
Socket mSocket = mServerSocket.accept();
InputStream mInputStream = mSocket.getInputStream();
byte buffer [] = new byte[1024*4];
int temp = 0;
while((temp = mInputStream.read(buffer)) != -1){
Log.d("myDebug", "Now is printing the String !");
System.out.println(new String(buffer,0,temp));
}
}
catch(Exception e){
e.printStackTrace();
}
finally{
try{
mServerSocket.close();
}
catch(Exception e){
e.printStackTrace();
}
}
}
}*/
//UDP
class ServerThread extends Thread {
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
try {
DatagramSocket socket = new DatagramSocket(1234);
byte data[] = new byte[1024 * 4];
DatagramPacket packet = new DatagramPacket(data, data.length);
socket.receive(packet);
String result = new String(packet.getData(), packet.getOffset(), packet.getLength());
System.out.println("result ------------> " + result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_socket_server, menu);
return true;
}
}
3、基于TCP协议的Scoket
package client;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Client_TCP {
private String str = "abcdefghijklnopqrstuvwxyz!";
public static void main(String[] args) {
try{
Socket mSocket = new Socket("192.169.0.1", 1234);
InputStream mInputStream = new FileInputStream("I:\\1.txt");
OutputStream mOutputStream = mSocket.getOutputStream();
byte buffer[] = new byte[1024*4];
int temp = 0 ;
while((temp = mInputStream.read(buffer)) != -1){
mOutputStream.write(buffer, 0, temp);
}
mOutputStream.flush();
}
catch(Exception e){
e.printStackTrace();
}
}
}
4、基于UDP协议的Scoket
package client;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Client_UDP {
public static void main(String[] args) {
try {
DatagramSocket socket = new DatagramSocket(1234);
InetAddress serverAddress = InetAddress.getByName("192.168.0.1");
String str = "abcdefghijkmnopqstuvwyz";
byte data[] = new byte[1024 * 4];
data = str.getBytes();
DatagramPacket packet = new DatagramPacket(data, data.length, 1234);
socket.send(packet);
} catch (Exception e) {
e.printStackTrace();
}
}
}