前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手撸实现UDP和TCP通信

手撸实现UDP和TCP通信

作者头像
Java旅途
发布2020-08-03 20:27:57
6540
发布2020-08-03 20:27:57
举报
文章被收录于专栏:Java旅途

UDP

UDP是一种面向无连接的协议,因此传输过程中不能保证数据的完整性。jdk提供了网络通信包,在java.net包下提供了两个类DatagramPacket和DatagramSocket来实现UDP通信。这两个类可以这样理解,DatagramSocket是路,DatagramPacket路上装有人的车。也就是DatagramSocket决定了通信目标,DatagramPacket则代表封装好的数据。

UDP的特性决定了UDP协议的应用场景,在我身边最常见的应用场景就是物联网设备与服务端的通信。

UDPClient实现

代码语言:javascript
复制
public class UDPClient {
    public static void main(String[] args) throws Exception {
           byte[] data = "我是客户端,我发送了一条消息".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实现

代码语言:javascript
复制
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 = "我是服务端,我回复了一条消息".getBytes();
        DatagramPacket packet1 = new DatagramPacket(replyContent, replyContent.length, address, port);
        socket.send(packet1);
        socket.close();
    }
}

TCP

TCP是一种面向连接的服务,经过三次握手建立连接,通过传输字节流的方式进行通信。因此可以保证消息的完整性。同样,在java.net包下也提供了两个包Socket和ServerSocket来实现TCP通信。

TCPClient

代码语言:javascript
复制
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 = "我是客户端,我发了一条消息";
        out.writeUTF(data);

        DataInputStream in = new DataInputStream(socket.getInputStream());
        String message = in.readUTF();
        System.out.println("TCPClient:"+message);
        socket.close();
    }
}

TCPServer

代码语言:javascript
复制
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("我是服务器,我回复了一条消息");
        socket.close();
        serverSocket.close();
    }
}

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java旅途 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • UDP
    • UDPClient实现
      • UDPServer实现
      • TCP
        • TCPClient
          • TCPServer
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档