【问题标题】:TCP Server and ClientTCP 服务器和客户端
【发布时间】:2018-01-19 23:54:04
【问题描述】:

所以我正在尝试编写一个 TCP 服务器和客户端,以便当客户端连接时,从服务器发回一个文件。这是我的服务器代码:

import socket
import threading

bind_ip = '0.0.0.0'
bind_port = 9999

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((bind_ip, bind_port))
server.listen(10)

file_to_send = ('file_to_send.txt')

print '[*] Listening on %s:%d' % (bind_ip,bind_port)

def handle_client(client_socket):
    request = client_socket.recv(1024)
    print '[*] Received %s' % request
    client_socket.send('')
    client_socket.close(file_to_send)

while True:
    client,addr = server.accept()
    print '[*] Accepted connection from: %s:%d' % (addr[0],addr[1])
    client_handler = threading.Thread(target=handle_client,args=(client,))
    client_handler.start()

这是我的客户代码:

import socket

target_host = '0.0.0.0'
target_port = 9999

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((target_host,target_port))
client.send('ACK!')

response = client.recv(4096)
print response

服务器和客户端运行时,服务器返回错误“每个套接字地址(协议/网络地址/端口)通常只允许使用一次”,当客户端运行时,我收到错误“请求的地址”在其上下文中无效'

有谁知道为什么会发生这些错误或我可以如何解决它。

【问题讨论】:

  • 您的客户端代码正在与不是有效地址的0.0.0.0 通话(在服务器中它只是意味着“监听所有传入连接”)

标签: python python-2.7


【解决方案1】:

我认为这是示例代码不准确的情况。您发布的服务器代码不会导致您描述的问题(客户端代码会,但我们会解决)。

服务器

服务器代码的问题是您绑定到同一个(address, port) 两次。这是由于错误的缩进还是错误的逻辑很难说,但该错误消息来自于将同一协议多次绑定到具有相同端口号的同一地址。

代码的其余部分看起来不错,但您不能像在此处那样执行client_socket.close("some string")socket.close 不接受任何参数。

客户

这里有一个简单的解决方案——只需将target_host 更改为合理的值。您无法连接到0.0.0.0。这应该是服务器在最小范围内的可寻址 IP。如果这是一个玩具程序,大概是localhost

(注意,您将服务器绑定到 '0.0.0.0' 以告诉它接受到任何目标 IP 的连接。您可以将服务器绑定到 '127.0.0.1' 以通知服务器它只会被称为 localhost 和从来没有其他任何东西。)

【讨论】:

    【解决方案2】:

    我之前也遇到过类似的问题,就是我在同一端口上运行旧版本的程序,重新启动 PC 或关闭任务管理器中的进程应该可以解决它。

    我知道这是在一年前提出的,因此 OP 从那时起可能已经重新启动了他们的 PC,但希望这将有助于寻找类似问题的解决方案的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-25
      • 1970-01-01
      • 2016-07-28
      • 2019-02-26
      • 2013-08-20
      • 2012-01-04
      相关资源
      最近更新 更多