OSError:[Errno 57]套接字未连接

时间:2019-03-06 21:41:45

标签: python json sockets

我正在尝试使用socket模块来了解python上的联网,但是我认为问题在于我并不真正了解服务器或客户端的实际功能。

我要做什么:

  • 首先使用JSON将字典转换为字符串,从而将字典从客户端发送到服务器
  • 使服务器向客户端发送一条消息,以确认它们已连接

服务器程序

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]套接字未连接

为什么?

1 个答案:

答案 0 :(得分:0)

在服务器代码中,您需要更改...

s.sendall(message)

...到...

conn.sendall(message)

这是因为当您这样做时...

conn, addr = s.accept()

... conn是用于该连接的 套接字实例 。这就是您应该用于在该连接上发送和接收数据的对象。在致电accept()接受连接之前,您没有实际连接任何东西的插座。