今天学习一下python端的UDP通信,在网上找了资料学习
有一些值得注意的地方:如果没有这段代码:
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
将会出现错误
还有一些细节:如下
p = Process(target=f, args=('huang',)) #一般需要传入target目标函数,args函数的参数 args=('',)这个“,”不能省略
服务器端代码如下(大量参考互联网资料):
import socket
from multiprocessing import Process
import sys, os
def my_fun(self):
try:
# 变量声明
PORT = 9999
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#重复使用绑定信息
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
address = ("192.168.130.130", PORT)
server_socket.bind(address)
while True:
print('server waiting')
receive_data, client_address = server_socket.recvfrom(1024)
print("接收到了客户端 %s 传来的数据: %s" % (client_address, receive_data.decode()))
server_socket.sendto(bytes("hello , if you want to exit the dialog,input quit please!".encode('utf-8')),
client_address, )
#if (str(receive_data, 'utf8') == 'quit'):
# print('client exit')
# break
finally:
server_socket.close()
def works(func, arg, worknum):
proc_record = []
for i in range(worknum):
p = Process(target=func, args=(arg,))
p.start()
proc_record.append(p)
for p in proc_record:
p.join()
if __name__ == '__main__':
arg = 5
procs=3
#procs = 4 #进程个数
# works(timetask, arg, procs)
works(my_fun, arg, procs)
客户端代码:
import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while True:
msg = input("请输入要发送的内容:")
server_address = ("192.168.130.130", 9999)
client_socket.sendto(msg.encode(), server_address)
receive_data,server_address=client_socket.recvfrom(1024)
print("recv server %s data:%s" %(server_address,receive_data.decode()))
if(msg=='exit'):
break
client_socket.close()
基本实现了基于python 的UDP通信,收获满满的一天!