【发布时间】:2015-03-13 15:45:14
【问题描述】:
我正在使用 python 创建一个测试客户端来测试我的服务器。它将 TCP 数据包发送到服务器,应该在同一 TCP 连接中向客户端发送回 1 个响应。如果它没有发送任何响应,或者发送超过 1 个响应,那么我在服务器代码中存在错误。
我想要做的是监视 TCP 端口的响应消息并将它们打印出来。如果没有响应,脚本应该在超时后继续执行。
以下是相关代码:
import socket
import time
import multiprocessing
def get_response(response_stream, response_buffer_size):
response_count = 1
while True:
response = response_stream.recv(response_buffer_size).decode()
print("[response]", response_count, ":", response)
response_count += 1
TCP_IP = '192.168.1.101'
TCP_PORT = 12345
BUFFER_SIZE = 1024
MESSAGE = b"Bazinga!"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send(MESSAGE.encode())
print("Message sent.")
p = multiprocessing.Process(target = get_response(s,BUFFER_SIZE))
p.start()
p.join(3)
if p.is_alive():
print("Killing thread ...")
p.terminate()
p.join()
s.close()
print("Socket closed.")
所以事实证明永远不会到达p.join(3),因为代码被困在get_response 的这一行:response = response_stream.recv(response_buffer_size).decode()。
脚本将一直在那里等待解码下一个数据包,因此脚本永远不会正确终止。我做错了什么?
【问题讨论】:
-
您使用的是 windows 还是 unix?您可以使用一个仅限于 unix 的功能。
-
另外,什么版本的 Python?
-
客户端是python 3,在windows上。在 linux 上运行相同代码的能力将是一个奖励。
标签: python network-programming