所以我有这个 python 服务器,它只返回作为输入的大写句子:
from socket import *
serverPort = 12000
serverSocket = socket(AF_INET, SOCK_DGRAM)
serverSocket.bind(('192.168.1.2', serverPort))
print "The server is ready to receive on port: {}".format(serverPort)
while 1:
message, clientAddress = serverSocket.recvfrom(2048)
print clientAddress, message
modifiedMessage = message.upper()
serverSocket.sendto(modifiedMessage, clientAddress)
来自此客户:
from socket import *
serverName = "192.168.1.3"
serverPort = 12000
clientSocket = socket(AF_INET, SOCK_DGRAM)
message = raw_input("Input lowercase sentence:")
clientSocket.sendto(message,(serverName, serverPort))
modifiedMessage, serverAddress = clientSocket.recvfrom(2048)
print modifiedMessage
clientSocket.close()
一切按预期运行,localhost
但当我server.py
在一台机器上执行并client.py
在另一台机器上运行时,客户端无法联系server.py
。此外,我甚至无法在运行的同一台机器上
连接到)以下是回溯:server.py
telnet
server.py
Connecting To 192.168.1.2...Could not open connection to the host, on port 12000: Connect failed
现在我使用 Wireshark 嗅探了一些数据包,令人惊讶的是,针对这个数据包的协议是LLC
,UDP
数据字段是:
Data: 74:5f:32:20:61:6e:64:72:6f:69:64
[Length: 11]
如果差异很小,我深感抱歉,但我刚刚开始套接字编程,它让我很烦恼。
答案1
首先,因为它是唯一的,SOCK_DGRAM
所以UDP
您将无法使用。telnet
TCP
数据包是UDP
。我估计那wireshark
只是LLC
因为端口12000
(我相信LLC
在 之上运行UDP
)而误认为是 。
看起来这不起作用,因为您已经在客户端脚本中设置了,serverName
但.3
服务器正在监听.2
。
我也会忽略 Python 中的驼峰式大小写;)