我正在尝试使用socket
模块来了解python上的联网,但是我认为问题在于我并不真正了解服务器或客户端的实际功能。
我要做什么:
服务器程序
import socket
import json
HOST = '192.168.X.X'
PORT = 50034
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
with conn:
while True:
data = conn.recv(1024)
new_data = data.decode()
new_data = json.loads(data)
print(new_data["Name"],"has connected from",addr)
message = ("Hello %s welcome to the chat server" % new_data["Name"]).encode()
s.sendall(message)
if not data:
conn.sendall(data)
客户端程序
import socket
import json
HOST = '192.168.X.X'
PORT = 50034
my_dict = {"Name":"Bob"}
jsn = json.dumps(my_dict)
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST,PORT))
s.sendall((jsn).encode())
data = s.recv(1024)
print(data)
但是我得到了错误:
OSError:[Errno 57]套接字未连接
为什么?
答案 0 :(得分:0)
在服务器代码中,您需要更改...
s.sendall(message)
...到...
conn.sendall(message)
这是因为当您这样做时...
conn, addr = s.accept()
... conn
是用于该连接的 新 套接字实例 。这就是您应该用于在该连接上发送和接收数据的对象。在致电accept()
接受连接之前,您没有实际连接任何东西的插座。