手?jǐn)]實現(xiàn)UDP和TCP通信
UDP
UDP是一種面向無連接的協(xié)議,因此傳輸過程中不能保證數(shù)據(jù)的完整性。jdk提供了網(wǎng)絡(luò)通信包,在java.net包下提供了兩個類DatagramPacket和DatagramSocket來實現(xiàn)UDP通信。這兩個類可以這樣理解,DatagramSocket是路,DatagramPacket路上裝有人的車。也就是DatagramSocket決定了通信目標(biāo),DatagramPacket則代表封裝好的數(shù)據(jù)。
UDP的特性決定了UDP協(xié)議的應(yīng)用場景,在我身邊最常見的應(yīng)用場景就是物聯(lián)網(wǎng)設(shè)備與服務(wù)端的通信。
UDPClient實現(xiàn)
- public class UDPClient {
- public static void main(String[] args) throws Exception {
- byte[] data = "我是客戶端,我發(fā)送了一條消息".getBytes();
- InetAddress address = InetAddress.getByName("localhost");
- DatagramPacket packet = new DatagramPacket(data,data.length,address,8888);
- DatagramSocket socket = new DatagramSocket();
- socket.send(packet);
- byte[] message = new byte[1024];
- DatagramPacket packet1 = new DatagramPacket(message,message.length);
- socket.receive(packet1);
- String replyContent = new String(message,0,message.length);
- System.out.println("UDPClient 接收到了消息:"+replyContent);
- socket.close();
- }
- }
UDPServer實現(xiàn)
- public class UDPServer {
- public static void main(String[] args) throws Exception {
- DatagramSocket socket = new DatagramSocket(8888);
- byte[] data = new byte[1024];
- DatagramPacket packet = new DatagramPacket(data,data.length);
- socket.receive(packet);
- String message = new String(data,0,packet.getLength());
- System.out.println("UDPServer 接收到了消息:"+message);
- InetAddress address = packet.getAddress();
- int port = packet.getPort();
- byte[] replyContent = "我是服務(wù)端,我回復(fù)了一條消息".getBytes();
- DatagramPacket packet1 = new DatagramPacket(replyContent, replyContent.length, address, port);
- socket.send(packet1);
- socket.close();
- }
- }
TCP
TCP是一種面向連接的服務(wù),經(jīng)過三次握手建立連接,通過傳輸字節(jié)流的方式進(jìn)行通信。因此可以保證消息的完整性。同樣,在java.net包下也提供了兩個包Socket和ServerSocket來實現(xiàn)TCP通信。
TCPClient
- public class TCPClient {
- public static void main(String[] args) throws Exception {
- Socket socket = new Socket("localhost",8081);
- DataOutputStream out = new DataOutputStream(socket.getOutputStream());
- String data = "我是客戶端,我發(fā)了一條消息";
- out.writeUTF(data);
- DataInputStream in = new DataInputStream(socket.getInputStream());
- String message = in.readUTF();
- System.out.println("TCPClient:"+message);
- socket.close();
- }
- }
TCPServer
- public class TCPServer {
- public static void main(String[] args) throws Exception{
- ServerSocket serverSocket = new ServerSocket(8081);
- Socket socket = serverSocket.accept();
- DataInputStream in = new DataInputStream(socket.getInputStream());
- String message = in.readUTF();
- System.out.println("TCPServer:"+message);
- DataOutputStream out = new DataOutputStream(socket.getOutputStream());
- out.writeUTF("我是服務(wù)器,我回復(fù)了一條消息");
- socket.close();
- serverSocket.close();
- }
- }
本文轉(zhuǎn)載自微信公眾號「Java旅途」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系Java旅途公眾號。