Python 客户端无法接收UDP消息
我是使用python进行套接字编程的初学者。我正在做我的课程计划。我的项目的一部分需要使用不同的端口发送和接收UDP消息。提供了名为robot的服务器程序,我需要编写名为student的客户端程序,该程序可以与机器人交互。因此,我无法在服务器程序中显示所有源代码 这是与服务器程序中的UDP套接字相关的部分Python 客户端无法接收UDP消息,python,sockets,udp,Python,Sockets,Udp,我是使用python进行套接字编程的初学者。我正在做我的课程计划。我的项目的一部分需要使用不同的端口发送和接收UDP消息。提供了名为robot的服务器程序,我需要编写名为student的客户端程序,该程序可以与机器人交互。因此,我无法在服务器程序中显示所有源代码 这是与服务器程序中的UDP套接字相关的部分 ############################################################################# phase 3 # Create a
############################################################################# phase 3
# Create a UDP socket to send and receive data
print ("Preparing to receive x...")
addr = (localhost, iUDPPortRobot)
s3 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s3.bind(addr)
x, addr = s3.recvfrom(1)
print ("Get x = %d" % (int(x)))
############################################################################# phase 3
time.sleep(1)
print ("Sending UDP packets:")
messageToTransmit = ""
for i in range(0,int(x) * 2):
messageToTransmit += str(random.randint(0,9999)).zfill(5)
print ("Message to transmit: " + messageToTransmit)
for i in range(0,5):
s3.sendto(messageToTransmit.encode(),(studentIP,iUDPPortStudent))
time.sleep(1)
print ("UDP packet %d sent" %(i+1))
############################################################################# phase 4
这是我的客户程序。s3是UDP套接字。我可以成功地将消息发送到服务器程序,但无法从服务器程序接收消息。这是因为端口不同吗?如果是,我应该怎么做才能修复它
import os
import subprocess
import socket
import random
import time
sendPort = 3310
localhost = '127.0.0.1'
socket.setdefaulttimeout(10)
command = "python robot_for_python_version_3.py"
subprocess.Popen(command)
print("ROBOT IS STARTED")
sendSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sendSocket.connect((localhost, sendPort))
studentId = '1155127379'
sendSocket.send(studentId.encode())
s_2Port = sendSocket.recv(5)
sendSocket.close()
s_2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s_2.bind((localhost, int(s_2Port)))
s_2.listen(5)
s2, address = s_2.accept()
s_2.close()
step4Port = s2.recv(12)
iUDPPortRobot, dummy1 = step4Port.decode().split(",")
iUDPPortStudent, dummy2 = dummy1.split(".")
s3 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
num = random.randint(5,10)
time.sleep(3)
s3.sendto(str(num).encode(), (localhost, int(iUDPPortRobot)))
print("Test1")
charStr = s3.recvfrom(1024)
print("Test2")
print(charStr)
exit()
您没有接收到消息的原因是服务器将其发送到未侦听消息的端点。由于协议是UDP(无保证等),服务器将消息成功发送到非侦听端点,而侦听端点将永远等待 更详细地说,
addr
由x返回,addr=s3。recvfrom(1)
不是(studentIP,iUDPPortStudent)
。尝试以下内容以了解差异(注意,您省略了定义并共享iudportrobot
的部分,为了便于说明,我将其设置为50000):
#在一个交互式会话1(终端)中,我们称之为会话1
>>>导入套接字
>>>随机输入
>>>导入时间
>>>
>>>IUDPortRobot=50000
>>>地址=('localhost',iUDPPortRobot)
>>>s3=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
>>>s3.绑定(addr)
>>>x,addr=s3.recvfrom(1)#>>charStr=s3.recvfrom(1024)#