【发布时间】:2020-06-22 17:48:13
【问题描述】:
我正在尝试创建一个简单的 UDP 服务器和客户端,它们将仅交换其连接的字符串确认。但是,我的客户端程序虽然似乎已连接,但并没有执行数据传输。
这是我的服务器的代码,我很确定这段代码没问题,因为我能够让其他人连接他们的 UDP 客户端并且执行很好。
#!/usr/bin/env python
################ UDP SERVER ################################
import socket
import threading
import sys
ip = sys.argv[1] # this is local host
port = int(sys.argv[2]) # we'll start here.
sock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM)
done = False
while not done:
try: # servers must bind an ip address and a port to work
sock.bind((ip, port))
done = True
print("Listening on Port: " + str(port))
except:
print("Cannot connect to Port: " + str(port))
port += 1
def handel( a_socket):
request = a_socket.recv(1024)
print(str(request))
a_socket.send("Thank you sir!") # the acknowledgement
a_socket.close() # close the socket so it is NOT locked up.
while True:
message,addr = sock.recvfrom(2500) # OK someone pinged me.
print( "received from "+str(addr)+': '+str(message) )
sock.sendto("Thank you!",addr)
sock.close()
sys.exit()
break
这是我的错误 UDP 客户端程序
#!/usr/bin/env python
##################### UDP CLIENT #############################
import socket
import ssl
import sys
if len(sys.argv) < 3:
print "USAGE program IP port "
sys.exit()
try:
ip = sys.argv[1]
port = int(sys.argv[2])
except:
print "USAGE program IP port "
sys.exit()
def listen(ip, port):
sox = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
sox.connect((ip, port))
print("UDP server listening on Port: " +str(port))
data, addr = sox.recvfrom(1024)
print("Received: ", data, addr)
sox.sendto("Thank you!", addr)
sox.close()
except:
print("UDP server not listening on Port: " + str(port))
sys.exit()
listen(ip, port)
用 Python 2.7 编写,需要两个命令行输入 ip 地址和端口号。让我知道您的想法,感谢您的宝贵时间!
【问题讨论】:
-
您的服务器等待接收数据报,然后发送响应。您的客户端还等待接收数据报,然后发送响应。既然他们都在等对方说话,他们没有取得太大进展也就不足为奇了。但是 +1 是一个很好的问题。