1.TCP(Transmission Control Protocol)傳輸控制協議,是面向鏈接的,可靠的,有序的,基於字節流的傳輸層通信協議。
2.UDP(User Datagram Protocol)用戶數據報協議,是面向無連接的,不可靠的,無序的,面向報文的傳輸層通信協議。
Java中基於TCP提供的兩個重要的類是服務端的ServerSocket和客戶端的socket。基於UDP提供的連個類是DatagramPacket和DatagramSocket。具體代碼如下:
TCP客戶端:
try {
Socket sc = new Socket("192.168.1.114",8650);
OutputStream os = sc.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.write("用戶名:admin;密碼:123456");
System.out.println("哈哈");
pw.flush();
sc.shutdownOutput();
InputStream is = sc.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String str = br.readLine();
while(str!=null){
System.out.println("我是客戶端:服務器說:"+str);
str = br.readLine();
}
is.close();
br.close();
os.close();
pw.close();
sc.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
TCP服務端:
try {
ServerSocket ss = new ServerSocket(8650);
//調用accept方法
System.out.println("****服務器即將啓動,等待鏈接****");
Socket so = ss.accept();
//通過輸入輸入量獲取信息
InputStream is = so.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String info = br.readLine();
while(info!=null){
System.out.println("服務端:"+info);
info = br.readLine();
}
so.shutdownInput();
OutputStream os = so.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.write("歡迎");
pw.flush();
pw.close();
os.close();
is.close();
isr.close();
br.close();
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
UDP客戶端:
InetAddress ia = InetAddress.getByName("localhost");
int port=8650;
byte[] data = "用戶名:啊哈,密碼:123456".getBytes();
DatagramPacket dp = new DatagramPacket(data, data.length,ia,port);
DatagramSocket ds = new DatagramSocket();
ds.send(dp);
byte[] data2 = new byte[1024];
DatagramPacket dp2 = new DatagramPacket(data2, data2.length);
ds.receive(dp2);
String info = new String(data2, 0, dp2.getLength());
System.out.println("客戶端:服務器說:"+info);
ds.close();
UDP服務端:
DatagramSocket ds = new DatagramSocket(8650);
byte[] data = new byte[1024];
DatagramPacket dp = new DatagramPacket(data, data.length);
System.out.println("********服務器端已經啓動,等待鏈接********");
ds.receive(dp);
String info = new String(data, 0, dp.getLength());
System.out.println("服務器端:客戶說:"+info);
InetAddress ia = dp.getAddress();
int port = dp.getPort();
System.out.println(port);
byte[] data2 = "歡迎你".getBytes();
DatagramPacket packet2 = new DatagramPacket(data2, data2.length, ia,port);
ds.send(packet2);
ds.close();