以前寫過一個局域網通信工具,很簡單的。但是這系列文章是用來解決新手問題的。所以打算寫個最簡單的demo。
廢話少說,先來個基於TCP的。
上server端代碼:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class MyServiceSocket {
public static void main(String[] args) {
try {
// 1.建立一個服務器socket對象
ServerSocket ss = new ServerSocket(8888);
// 2.等待客戶端連接
Socket s = ss.accept();// 等到客戶端連接
// 通過輸入輸出流操作數據
InputStream is = s.getInputStream();
DataInputStream dis = new DataInputStream(is);
System.out.println(dis.readUTF());
OutputStream out = s.getOutputStream();
DataOutputStream dos = new DataOutputStream(out);
dos.writeUTF("hello client!");
// 4.關閉數據流
dis.close();
is.close();
s.close();
ss.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
客戶端代碼:import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class MyClient {
public MyClient() {
}
public static void main(String[] args) {
try {
// 1.建立Socket對象
Socket client = new Socket("localhost", 8888);
// 2.通過socket對象的輸入輸出流操作數據
OutputStream out = client.getOutputStream();
DataOutputStream dos = new DataOutputStream(out);
dos.writeUTF("hello service!");
InputStream is = client.getInputStream();
DataInputStream dis = new DataInputStream(is);
System.out.println(dis.readUTF());
System.out.println(client.getInetAddress());
System.out.println(client.getLocalPort());
System.out.println(client.getLocalSocketAddress());
System.out.println(client.getChannel());
// 3.關閉連接
dos.close();
out.close();
client.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
再來一個基於UDP的。
server端代碼:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class MyUDPServer {
public static void main(String[] args) {
byte b[] = new byte[100];
try {
DatagramPacket dp = new DatagramPacket(b, b.length);
DatagramSocket ds = new DatagramSocket(8888);
ds.receive(dp);
String s = "你發的數據是:" + new String(b).trim();
System.out.println(s);
dp = new DatagramPacket(s.getBytes(), s.getBytes().length,
dp.getAddress(), dp.getPort());
ds = new DatagramSocket();
ds.send(dp);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Client端:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* 類說明:UDP數據包 udp 總結 1.將要發的數據先進行打包 使用的類是:DatagramPacket 2.發送打包好的數據
* 使用的類是:DatagramSocket (發送數據包) 注意事項:發送數據報是要知道目的地和目的端口號
* 所以要採用DatagramPacket(byte[] buf, int length,InetAddress address,int port)
* 因爲發送的時候已經知道端口號 故發送DatagramSocket()不需要再寫參數了
*
* 接收數據包: 1.接收的時候要將接受的數據打包DatagramPacket(byte[] buf, int length)
* 2.接收的時候要知道重那個端口接收 故使用的時候要DatagramSocket(int prot);
*
*/
public class MyUDPClient {
public static void main(String[] args) {
byte b[] = "hello udp server!".getBytes();
try {
InetAddress add = InetAddress.getByName("localhost");
DatagramPacket dp = new DatagramPacket(b, b.length, add, 8888);
DatagramSocket ds = new DatagramSocket();
ds.send(dp);
b = new byte[100];
dp = new DatagramPacket(b, b.length);
ds.receive(dp);
System.out.println(new String(b).trim());
} catch (Exception e) {
e.printStackTrace();
}
}
}
來於:http://blog.csdn.net/withiter/article/details/17226405#,有刪改。