【发布时间】:2021-11-06 13:29:51
【问题描述】:
我正在尝试使用 Python 套接字编程建立客户端服务器设置:
我有 2 台不同的机器(两台 VM)。我的服务器和客户端脚本运行。但是无论我从客户端发送什么,服务器都没有收到:
服务器代码:
import socket
def Main():
host = 'x.x.x.x' #Server ip
port = 15099
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((host, port))
print("Server Started")
while True:
data, addr = s.recvfrom(1024)
data = data.decode('utf-8')
print("Message from: " + str(addr))
print("From connected user: " + data)
data = data.upper()
print("Sending: " + data)
s.sendto(data.encode('utf-8'), addr)
s.close()
if __name__=='__main__':
Main()
客户代码:
import socket
def Main():
host='Y.Y.Y.Y' #client ip
port = 15100
server = ('X.X.X.X', 15099)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((host,port))
message = input("-> ")
while message !='q':
s.sendto(message.encode('utf-8'), server)
data, addr = s.recvfrom(1024)
data = data.decode('utf-8')
print("Received from server: " + data)
message = input("-> ")
s.close()
if __name__=='__main__':
Main()
我错过了什么吗?
还有,
当我在同一台机器上运行服务器和客户端时[将服务器作为本地主机],它工作正常。当它们是 2 台不同的机器时,它不会发送任何消息。
【问题讨论】:
-
服务器代码
c.close()中的错字。你的意思是 s.close()。 -
已编辑。谢谢!
-
两个虚拟机可以用所用的IP互相ping通吗?
-
是的,两者都能互相ping通。脚本中也给出了相同的 IP。
-
通常,服务器使用
('',port)或('0.0.0.0',port)(相同含义)来侦听服务器支持的任何接口,但您的代码(在客户端中使用和不使用不必要的绑定)与@一起使用987654326@作为服务器。
标签: python python-3.x sockets tcp network-programming