【轉載請註明出處:http://blog.csdn.net/zjbpku/article/details/7752072】
Socket 通信
1.UDP實現 (DatagramSocket)【客戶端】
//首先創建一個DatagramSocket對象
DatagramSocket socket = new DatagramSocket(4567);
//創建一個InetAddress
InetAddress serverAddress = InetAddress.getByName("192.168.1.104");
String str = "hello"; //這是要傳輸的數據
byte data [] = str.getBytes(); //把傳輸內容分解成字節
//創建一個DatagramPacket對象,並指定要講這個數據包發送到網絡當中的哪個、地址,以及端口號
DatagramPacket packet = new DatagramPacket(data,data.length,serverAddress,4567);
//調用socket對象的send方法,發送數據
socket.send(packet);
【服務器端】
//創建一個DatagramSocket對象,並指定監聽的端口號
DatagramSocket socket = new DatagramSocket(4567);
byte data [] = new byte[1024];
//創建一個空的DatagramPacket對象
DatagramPacket packet = new DatagramPacket(data,data.length);
//使用receive方法接收客戶端所發送的數據,
//如果客戶端沒有發送數據,該進程就停滯在這裏
socket.receive(packet);
String result = new String(packet.getData(),packet.getOffset(),packet.getLength());
2.TCP通信
【客戶端】
創建一Socket對象並指明服務器端的IP及端口號
Socket socket = new Socket("192.168.1.0",45678);
//向服務器發送消息
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
out.println(message);
//從服務器接收消息
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String rString = is.readLine().toString();
【服務器端】
//創建一個ServerSocket對象,並讓這個Socket在45678端口監聽
serverSocket = new ServerSocket(45678);
//調用ServerSocket的accept()方法,接受客戶端所發送的請求,
//如果客戶端沒有發送數據,那麼該線程就停滯不繼續
Socket socket = serverSocket.accept();
//從Socket當中得到InputStream對象
InputStream inputStream = socket.getInputStream();
byte buffer [] = new byte[1024*4];
int temp = 0;
//從InputStream當中讀取客戶端所發送的數據
while((temp = inputStream.read(buffer)) != -1)
{
String str = new String(buffer,0,temp);
//接下來可以對從客戶端接收到的消息做處理
}
Socket類包含一些非常有用的屬性,這些屬性允許確定關於正在連接的客戶端的信息。其中關鍵信息之一
是返回EndPoint對象的RemoteEndPoint屬性。EndPoint類本身是抽象的,要想收集有用的信息,需·要把
EndPoint強制類型轉換爲IPEndPoint對象。IPEndPoint類包含遠程客戶端的IP地址和端口號。具體用法如下:
TcpListener tcpl=new TcpListener(port);
Socket s=tcpl.AcceptSocket();
label1.text=((IPEndPoint)s.RemoteEndPoint).Address.ToString();
label2.text=((IPEndPoint)s.RemoteEndPoint).Port.ToString();