TCP服务器和客户端

时间:2016-12-15 21:10:14

标签: python python-2.7

所以我试图编写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

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

有谁知道为什么会出现这些错误或我如何能够解决它。

2 个答案:

答案 0 :(得分:0)

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

服务器

服务器代码的问题是您绑定到同一(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,而不是其他任何东西。)

答案 1 :(得分:0)

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

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