网络编程(UDP单线程)

本文介绍了UDP和TCP两种网络协议的区别,并提供了使用Java实现的UDP单线程发送和接收数据的示例。UDP无需建立连接,发送数据可能丢失但效率高,适合实时性要求高的场景;TCP则提供可靠的数据传输,确保数据无丢失,适用于需要稳定传输的场景。Java代码展示了如何创建DatagramSocket进行数据包的发送和接收。
摘要由CSDN通过智能技术生成

单线程信息收发
UDP和TCP区别
udp不需要创建服务器,只要知道对方ip和端口就可以相互发送;
udp相当于发快递/短信,sender发送消息没人接收就会丢失,不会报错;
tcp相当于打电话,服务器不接受就会报错

发送者

package socket;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.*;
public class UdpSender {
    public static void main(String[] args) throws Exception {
        //1创建发送管道
        DatagramSocket socket = new DatagramSocket(8888);
        //4创建包
        //4.1准备数据:控制台读取流system.in
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        //4.2处理输入流转成byte[]
        while (true){//循环发送
            //4.3把读取流转成字符串
            String data = reader.readLine();
            //4.4把字符串转成byte[]
            byte[] bytes = data.getBytes();
            //4.5打包:数据,数据起始位,数据长度,发给的IP和端口
            DatagramPacket packet = new DatagramPacket(bytes,0,bytes.length,new InetSocketAddress("localhost", 6666));
            //2发送包
            socket.send(packet);
            if (data.equals("bye")){//发送关键字出循环
                break;
            }
        }
        //3关闭管道
        socket.close();

    }
}

接收者

package socket;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UdpReceive {
    public static void main(String[] args) throws Exception {
        //1创建管道
        DatagramSocket socket = new DatagramSocket(6666);//接收端口
        //2接收包
        while (true){
            //2.1准备容器
            byte[] container = new byte[1024];//容器根据实际情况创建,可优化
            //2.2打包容器
            DatagramPacket packet = new DatagramPacket(container, 0,container.length);
            //2.3接收包
            socket.receive(packet);//阻塞式接收数据
            //2.4拆包
            byte[] data = packet.getData();
            String receiveData = new String(data,0,data.length);
            String trim = receiveData.trim();//因为容器问题导致字符串很多空格
            System.out.println(trim);
            if (trim.equals("bye")){
                break;
            }
        }

        //4关闭通道
        socket.close();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值