UDP传输多线程

发送和接收在一个窗口完成

        public class Demo3_MoreThread {

            /**
             * @param args
             */
            public static void main(String[] args) {
                new Receive().start();
                
                new Send().start();
            }
        
        }

        class Receive extends Thread {
            public void run() {
                try {
                    DatagramSocket socket = new DatagramSocket(6666);                    //创建socket相当于创建码头
                    DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);    //创建packet相当于创建集装箱
                    
                    while(true) {
                        socket.receive(packet);                                                //接收货物
                        byte[] arr = packet.getData();
                        int len = packet.getLength();
                        String ip = packet.getAddress().getHostAddress();
                        System.out.println(ip + ":" + new String(arr,0,len));
                    }
                } catch (IOException e) {
                    
                    e.printStackTrace();
                }
            }
        }

        class Send extends Thread {
            public void run() {
                try {
                    DatagramSocket socket = new DatagramSocket();        //创建socket相当于创建码头
                    Scanner sc = new Scanner(System.in);
                    
                    while(true) {
                        String str = sc.nextLine();
                        if("quit".equals(str))
                            break;
                        DatagramPacket packet =                             //创建packet相当于创建集装箱
                                new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);
                        socket.send(packet);            //发货
                    }
                    socket.close();
                }  catch (IOException e) {
                    
                    e.printStackTrace();
                }
            }
        }

 

转载于:https://www.cnblogs.com/yaobiluo/p/11357791.html

UDP传输可以使用多线程来实现。多线程可以提高程序的并发处理能力,使程序能够同时处理多个请求。 在UDP传输中,可以在主线程中创建多个子线程,每个子线程负责处理一个客户端的请求。主线程接收到客户端的请求后,将请求信息传递给子线程进行处理,然后继续等待下一个客户端的请求。 下面是一个使用多线程实现UDP传输的示例代码: ``` python import socket import threading def handle_client(data, addr): # 处理客户端请求 print('Received data from {}: {}'.format(addr, data.decode('utf-8'))) reply_msg = 'Hello UDP Client!' udp_socket.sendto(reply_msg.encode('utf-8'), addr) # 创建UDP socket udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 绑定socket udp_socket.bind(('127.0.0.1', 8888)) while True: # 接收客户端请求 data, addr = udp_socket.recvfrom(1024) # 创建子线程处理客户端请求 thread = threading.Thread(target=handle_client, args=(data, addr)) thread.start() ``` 在这个示例中,首先使用socket()函数创建一个UDP socket,然后使用bind()函数将socket绑定到本地IP地址和端口号上。接着在一个无限循环中,使用recvfrom()函数从指定端口号接收客户端请求。每当接收到一个客户端请求时,就创建一个子线程,将客户端请求信息传递给子线程进行处理。子线程处理完客户端请求后,使用sendto()函数向客户端发送响应消息。 需要注意的是,在多线程编程中,需要考虑线程安全问题,保证多个线程之间的数据访问不会发生冲突。在UDP传输中,可以使用锁等机制来保证线程安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值