【问题标题】:Python3 Client/Server IssuesPython3 客户端/服务器问题
【发布时间】:2014-11-17 07:07:39
【问题描述】:

早上好,我在下面的基本服务器/客户端程序遇到问题,在我在 2 个单独的 IDLE(python) 窗口上运行这两个脚本后,客户端成功连接到服务器,并且能够发送第一条消息(例如你好),在服务器端被翻译为“b'hello'”,但我无法再次从服务器响应客户端,我收到错误:

s.send(conn, str(reply).encode('utf-8')) TypeError:必须可以转换为缓冲区,而不是套接字

服务器:

import socket

HOST = 'localhost'
PORT = 8019
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, address = s.accept()
print("Connected to", address)
while True:
    data = conn.recv(1024)
    print("Recieved :", repr(data))
    reply = input("Reply :")
    s.send(conn, str(reply).encode('utf-8'))

conn.close()

客户:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost',8019))
while True:
    message = input("Your Message: ")
    s.send(bytes(message,"ascii"))
    print("Awaiting the reply...")
    reply = s.recv(1024)
    print("Recieved ", str(reply))



s.close()

我的问题如下,我如何将字符串发送回我的客户端程序?以及如何在没有“b''”格式的情况下读取从客户端发送的字符串

(附带说明,每次我重新启动服务器时,我都需要更改客户端和服务器程序上的端口,我是不是在使用后没有正确关闭端口?)

【问题讨论】:

    标签: python


    【解决方案1】:

    首先,当套接字接受客户端socket.accept() 时,它会返回两个值。 第一个是创建的新套接字,用于与连接端(客户端)进行通信。

    在您的服务器代码中,您提供客户端套接字作为参数,这应该引发和错误。您只需要提供要发送的数据。

    s.send(conn, str(reply).encode('utf-8'))
    

    您应该使用客户端套接字来发送数据。

    conn.send( reply.encode('utf-8') )
    

    不要使用发送,而是使用sendall(),这样可以确保所有数据都到达连接的另一端。

    接收数据时,使用与编码相同的格式(utf-8)进行解码

    data = conn.recv(4069).decode('utf-8')
    

    我已经编辑了你的代码

    服务器

    import socket
    
    HOST = 'localhost'
    PORT = 8019
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((HOST, PORT))
    s.listen(1) # Number of connections
    
    # Server loop
    while True:
        # Accept connections
        client, address = s.accept()
        print("Connected to", address)
    
        # Receive data and decode using utf-8
        data = client.recv( 1024 ).decode( 'utf-8' )
        print("Recieved :", repr(data))
    
        # Send data to client in utf-8
        reply = input("Reply :")
        client.sendall( reply.encode('utf-8') ) # Make sure data gets there with sendall()
    
    
    s.close()
    

    客户

    import socket
    
    # Create socket and connect it to server
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(('localhost',8019))
    
    # client loop
    while True:
        message = input("Your Message: ")
        s.send( message.encode('utf-8') )
        print("Awaiting the reply...")
        reply = s.recv( 1024 ).decode( 'utf-8' )
        print("Recieved ", str(reply))
    
    
    
    s.close()
    

    【讨论】:

      猜你喜欢
      • 2011-05-26
      • 2016-03-30
      • 2011-06-06
      • 2011-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多