基于UDP的Socket多个客户端之间的简单通信

基于UDP的Socket多个客户端之间的简单通信

本案例包括一个UDPServer.java服务器端类,两个客户端UDPClient.java、UDPClient2.java类,两个线程类,分别为UDPServerRunnable.java和UDPClientThread
下面直接贴代码

服务器端类UDPServer.java

package com.UDP;

import java.net.DatagramSocket;
import java.net.SocketException;

public class UDPService {
	public static void main(String[] args) {
		/*
		 * 接收客户端信息
		 */
		try {
			while(true) {
				DatagramSocket socket = new DatagramSocket(8888);
				UDPServerRunnable udpThread = new UDPServerRunnable(socket);
				udpThread.run();
			}
		} catch (SocketException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}

服务器端调用线程类UDPServerRunnable.java

package com.UDP;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPServerRunnable implements Runnable {
	DatagramSocket socket = null;
	DatagramPacket packet = null;
	public UDPServerRunnable(DatagramSocket socket) {
		this.socket = socket;
	}
	@Override
	public void run() {
		try {
			//2、创建数据报
			byte[] data = new byte[1024];
			packet =  new DatagramPacket(data, data.length);
			System.out.println("我是服务器,等待客户端连接" );
			socket.receive(packet);//把数据保存到packet
			if (socket == null) {
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
下面是一个基于 Python 的 Socket 实现的 UDP 多线程通信客户端和服务端的示例代码: 服务端代码: ``` import socket import threading # 定义服务器地址和端口号 HOST = '127.0.0.1' PORT = 8000 # 创建 UDP Socket server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) server_socket.bind((HOST, PORT)) def receive_thread(): while True: data, client_address = server_socket.recvfrom(1024) print(f'Received message from {client_address}: {data.decode()}') def send_thread(): while True: message = input("please input message: ") server_socket.sendto(message.encode(), (HOST, PORT)) # 创建接收和发送线程 receive_t = threading.Thread(target=receive_thread) send_t = threading.Thread(target=send_thread) # 启动线程 receive_t.start() send_t.start() # 等待线程结束 receive_t.join() send_t.join() # 关闭 Socket server_socket.close() ``` 客户端代码: ``` import socket import threading # 定义服务器地址和端口号 HOST = '127.0.0.1' PORT = 8000 # 创建 UDP Socket client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) def receive_thread(): while True: data, server_address = client_socket.recvfrom(1024) print(f'Received message from {server_address}: {data.decode()}') def send_thread(): while True: message = input("please input message: ") client_socket.sendto(message.encode(), (HOST, PORT)) # 创建接收和发送线程 receive_t = threading.Thread(target=receive_thread) send_t = threading.Thread(target=send_thread) # 启动线程 receive_t.start() send_t.start() # 等待线程结束 receive_t.join() send_t.join() # 关闭 Socket client_socket.close() ``` 在上面的代码中,服务端和客户端的实现基本相同,只是在绑定 Socket 和发送消息时的地址和端口号不同。服务端使用了 server_socket.bind() 方法来将 Socket 绑定到指定的地址和端口号上,并使用 server_socket.recvfrom() 方法来接收客户端发送的消息。客户端使用了 client_socket.sendto() 方法来将消息发送给服务端,并使用 client_socket.recvfrom() 方法来接收服务端返回的响应。 需要注意的是,由于 UDP 是无连接的协议,因此每次发送消息时都需要指定目标地址和端口号。在本示例中,我们将其设置为 HOST 和 PORT。另外,由于是多线程通信,因此需要注意线程安全问题。可以使用锁等机制来保证数据的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值