UDP協定: 無連接配接通信協定,當一台計算機向另一台計算機發送資料時,發送端不會确定接收端是否存在,接收端是否收到資料也不會向發送端回報。
例:QQ留言,視訊廣播(UDP協定内容大小限制在64kb以内)
TCP協定: 面向連接配接的通信協定,必須由用戶端去連接配接伺服器端才能實作通信,伺服器端一般不會主動聯系用戶端,并且伺服器需要先啟動去等待用戶端連接配接。
三次握手:
1.用戶端向服務端發出連接配接請求,等待伺服器确定
2.服務端向用戶端回送一個響應,通知其收到請求
3.用戶端再次向服務端發送确認資訊,确認連接配接。
如:下載下傳電影
用戶端與伺服器的了解:都是電腦,
伺服器:提供資料服務,在java中用ServerSocket表示伺服器端,伺服器需要事先啟動,去等待用戶端的連接配接。
用戶端:在Java中用Socket類表示。
比如:當我們下載下傳電影的時候,我們的電腦就是用戶端,電影的資料源就是伺服器,老師上課時的螢幕廣播,老師的電腦就是伺服器,我們用的就是用戶端。
面向網絡程式設計:TCP協定和UDP協定

實作UDP協定的發送端:
package UDP協定;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPsend {
public static void main(String[] args) throws Exception{
byte[] data = "你好UDP".getBytes();
InetAddress inet = InetAddress.getByName("127.0.0.1");
DatagramPacket dp = new DatagramPacket(data, data.length,inet,6000);
DatagramSocket ds = new DatagramSocket();
ds.send(dp);
ds.close();
}
}
實作UDP協定的接收端:
package UDP協定;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPrecieve {
public static void main(String[] args) throws Exception{
//建立資料包,傳輸對象DatagramSocket,綁定端口号
DatagramSocket ds = new DatagramSocket(6000);
//建立位元組數組,用于接收發來的資料
byte[] data = new byte[1024];
//建立資料包對象,傳遞位元組數組
DatagramPacket dp = new DatagramPacket(data,data.length);
//調用ds對象方法receive傳遞資料包
ds.receive(dp);
//擷取發送端的IP位址對象
String ip = dp.getAddress().getHostAddress();
//擷取發送端的端口号
int port = dp.getPort();
//擷取發送端的位元組數組個數
int length = dp.getLength();
System.out.println(new String(data,0,length)+" "+ip+" "+port);
}
}
實作TCP協定中用戶端和伺服器端之間的資訊傳遞:
TCP用戶端發送資訊給伺服器并接收伺服器發來的消息:
package TCP協定;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class TCPClient {
public static void main(String[] args) throws IOException{
//建立連接配接
Socket socket = new Socket("127.0.0.1",8888);
//寫入需要傳輸的資料
OutputStream out = socket.getOutputStream();
out.write("伺服器OK".getBytes());
//接受伺服器的資訊
InputStream in = socket.getInputStream();
byte[] data = new byte[1024];
int len = in.read(data);
System.out.println(new String(data,0,len));
//關閉資源
socket.close();
}
}
伺服器端:接收用戶端資訊并回給用戶端一個消息
package TCP協定;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPserver {
public static void main(String[] args) throws IOException{
ServerSocket server = new ServerSocket(8888);
Socket socket = server.accept();
InputStream in = socket.getInputStream();
byte[] data = new byte[1024];
int len = in.read(data);
System.out.println(new String(data,0,len));
OutputStream out = socket.getOutputStream();
out.write("收到,謝謝".getBytes());
socket.close();
server.close();
}