1

我在 python 上使用 asyncore.dispatcher 客户端连接到在 PC 上运行的 LabWindows 开发的服务器。这是连接到服务器的客户端上的代码片段:

class DETClient(asyncore.dispatcher):

   def __init__(self, host, port):
      asyncore.dispatcher.__init__(self)
      self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
      self.connect((host,port))

在服务器端,我的 Labwindows 代码正在寻找两个参数,TCPPeerName 和 TCPPeerAddr:

GetTCPPeerName (handle, peerName, sizeof (peerName));
GetTCPPeerAddr (handle, peerAddress, sizeof (peerAddress));

似乎 python 代码根本没有传递主机名,因为我的服务器为 PeerName 获取了 NULL。

在建立连接时,我是否必须做任何事情来专门使异步客户端发送 PeerName?

4

2 回答 2

1

在建立连接时,我是否必须做任何事情来专门使异步客户端发送 PeerName?

不,你没有,因为 TCP 客户端在建立连接时不发送名称。他们发送地址。

GetTCPPeerName几乎可以肯定是调用gethostbyaddr(X)X返回的地址在哪里GetTCPPeerAddr。在您的情况下gethostbyaddr()失败,因为信息不可用。

这意味着您的主机名解析数据库缺少一些数据——您可能需要更新您的 DNS、您的主机文件、您的 WINS 数据或您的主机名数据所在的任何位置。

于 2013-09-13T16:16:09.377 回答
0

那 DETClient 是实际的实现吗?因为它缺少该实例的主机和端口的实例化?在 self.connect 中,您使用的是 self.host 和 self.port,它们都评估为 None,因为您还没有设置它们。

class DETClient(asyncore.dispatcher):

  def __init__(self, host, port):
    self.host = host #<---- this is missing
    self.port = port #<---- this is missing
    asyncore.dispatcher.__init__(self)
    self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
    self.connect((self.host,self.port))
于 2013-09-13T15:52:01.530 回答