[Java] Socket 点对点通信

Socket

Socket 套接字,就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口 百度百科
程序采用多线程方式进行数据发送与接受

主类

Main.java

package UDPSocket;

public class Main {
    public static void main(String[] args) {
        new Receive().start();// 接受数据线程
        new Send().start();// 发送数据线程
    }
}

数据发送类

class Send extends Thread {
    public void run() {
        try {
            DatagramSocket socket = new DatagramSocket();
            Scanner sc = new Scanner(System.in);

            while (true) {
                String str = sc.nextLine();
                // 输入 logout 退出循环发送消息
                if ("logout".equals(str))
                    break;
                /**
                 * IP   : 数据接收者的IP,
                 * port : 数据接收着的端口
                 */
                String IP = "127.0.0.1";
                int port = 6666;
                DatagramPacket packet = new DatagramPacket(
                        str.getBytes(),
                        str.getBytes().length,
                        InetAddress.getByName(IP),
                        port
                    );
                socket.send(packet);
            }
            socket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

数据接受类

public class Receive extends Thread {
    public void run() {
        try {
            // 监听端口是否有数据,初始化数据容量
            DatagramSocket socket = new DatagramSocket(6666);
            DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);

            while(true) {
                socket.receive(packet);// 接收货物
                byte[] arr = packet.getData();
                int len = packet.getLength();
                String ip = packet.getAddress().getHostAddress();
                // 这个IP 为发送者的IP
                System.out.println("收到来自IP" + ip + "消息:" + new String(arr,0,len));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

本地测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AP339Rif-1653818163922)(https://cdn.jsdelivr.net/gh/xing403/iotblog@master/assets/website/20220528132257.png)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星如雨l

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值