【问题标题】:why i didn't get any error?为什么我没有收到任何错误?
【发布时间】:2016-03-04 14:36:11
【问题描述】:

我想知道当服务器与特定端口中的客户端连接时发生的异常名称,并且另一个客户端想从该端口连接到服务器...

所以我创建了服务器、客户端 1 和客户端 2,但是当服务器和客户端 1 连接在一起并且我运行客户端 3 时,它们惊人地没有任何错误,它们都继续运行。

我想知道为什么我没有收到任何错误?
'1' 在这一行中的确切作用是什么:serverSocket.listen(1)

这是服务器代码:

import socket
serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serverSocket.bind(('', 80))
print("Host=%s" %str(serverSocket.getsockname()))
serverSocket.listen(1)
clientSocket, addr = serverSocket.accept()
print("Got a connection from %s" % str(addr))
data = clientSocket.recv(1024)
print("from Client:%s "%str(addr))
print("\n data:%s "%str(data.decode("utf-8")))
#consciously i didn't close the the sockets

客户端1:

import socket
TCP_IP = '127.0.0.1'
TCP_PORT = 80
BUFFER_SIZE = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send(bytes("test code", 'utf-8'))
data = s.recv(BUFFER_SIZE)
print(type(data))
s.close()

客户端2

import socket
TCP_IP = '127.0.0.1'
TCP_PORT = 80
BUFFER_SIZE = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send(bytes("test3", 'utf-8'))
data = s.recv(BUFFER_SIZE)
print(type(data))
s.close()

其他,为什么当我运行 client2 时,服务器没有显示任何从中获得连接的消息,例如:

Got a connection from ('127.0.0.1', 64358)

【问题讨论】:

  • client2 真的连接到127.0.0.2 而不是127.0.0.1?
  • @SimonFraser 对不起,这是我的错,这是本地的 ...
  • listen(1) 可能是您没有收到错误消息的原因。这是积压 - 例如,您的服务器正在与 client1 交谈,与服务器交谈的等待队列长度允许为 1,因此 client2 正在排队等待,但连接永远不会accept()ed,因为那部分服务器不在循环中。
  • 积压有时间限制吗???如果没有,你的意思是当我尝试将三个客户端连接到我的服务器时会出错???
  • @SimonFraser 我可以将积压设置为零吗?

标签: python python-2.7 exception server client


【解决方案1】:

client1 的代码失败并出现错误:

TypeError: str() takes at most 1 argument (2 given)

这是因为python 2 中的bytes 与str 相同,并且它只接受一个字符串参数,功劳归于alecxe。

【讨论】:

  • 我放一个 func 将二进制转换为 str 的原因是,如果没有它,我会遇到编译错误。我只是在寻找连接错误...
猜你喜欢
  • 2021-12-05
  • 1970-01-01
  • 2016-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-04
  • 2023-02-17
  • 1970-01-01
相关资源
最近更新 更多