如果我有conn.send()
行,为什么我的连接会在3个打印语句后停止?如果该行已注释掉,则连接将无限期保持打开状态。由于某些原因它正在触及异常,但我不知道为什么,而且我对python缺乏经验。
server.py:
import random
import signal
import socket
import struct
import sys
import time
PORT = 1234
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('', PORT))
s.listen(1)
print("Server started on port %u" % PORT)
try:
while True:
(conn, addr) = s.accept()
conn.setblocking(0)
print("Client connected: %s:%d" % addr)
while True:
print "hey"
conn.send("random")
time.sleep(1)
except:
s.close()
print "exception"
client.py:
import socket # Import socket module
s = socket.socket() # Create a socket object
host = socket.gethostname() # Get local machine name
port = 1234 # Reserve a port for your service.
s.connect((host, port))
print s.recv(1024)
s.close
答案 0 :(得分:0)
此行为的原因是套接字实际上是在客户端recv()
之后关闭的,您的服务器直到第三次尝试send()
时才意识到它。在您的客户端中调用close()
没有改变任何东西,因为之前程序正在终止,无论如何都关闭了套接字。 This thread解释了为什么这很可能发生了什么。要测试此理论,您可以在关闭套接字之前尝试让客户端休眠(或select
)并打印更多recv()
个调用。