Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法将thrift c#客户端连接到python服务器_C#_Python_C++_Sockets_Thrift - Fatal编程技术网

无法将thrift c#客户端连接到python服务器

无法将thrift c#客户端连接到python服务器,c#,python,c++,sockets,thrift,C#,Python,C++,Sockets,Thrift,我有Thrift客户端服务器应用程序C#客户端和Python服务器。都在同一台机器上—Windows7。调试到Thrift代码时,我看到客户端的套接字无法连接到服务器的本地服务器 BTW,同一个C客户端连接到C+Server和Python和C++客户端连接到同一个Python服务器。只是C#-->Python组合失败了 这个问题看起来很相似。我试图按照上面链接中的答案修改代码,但C#socket仍然抛出“无法建立连接,因为目标机器主动拒绝127.0.0.1:9091” 客户(C): 为什么ipH

我有Thrift客户端服务器应用程序C#客户端和Python服务器。都在同一台机器上—Windows7。调试到Thrift代码时,我看到客户端的套接字无法连接到服务器的本地服务器
BTW,同一个C客户端连接到C+Server和Python和C++客户端连接到同一个Python服务器。只是C#-->Python组合失败了

这个问题看起来很相似。我试图按照上面链接中的答案修改代码,但C#socket仍然抛出“无法建立连接,因为目标机器主动拒绝127.0.0.1:9091”


客户(C):

为什么
ipHostInfo.AddressList[1]
?此选择从中获取IPv4适配器 ipconfig。我也尝试其他索引

服务器(Python,内部 到Thrift服务器库):



如果是C#client

您有太多重复的代码,它永远不会退出
accept
。请尝试以下操作:

            //client
            IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
            IPAddress ipAddress = ipHostInfo.AddressList[1];
            IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);
            TcpClient tcpClient = new TcpClient();
            tcpClient.Connect(remoteEP);

            //Server
            IPEndPoint localEP = new IPEndPoint(IPAddress.Any, port);
            TcpListener listener = new TcpListener(localEP);
            listener.Start();

为什么使用地址列表[1]而不是零?当您在同一台计算机上时,请始终确保您的服务器正在侦听IP。任何主机和客户端都连接到该计算机名(或IP)。被拒绝的127.0.0.1(环回地址)可能由于多种原因而发生。通常,当客户端连接未完成时,您会得到它。计算机有一个主机文件(在c:\windows文件夹中)可以进行不同的配置,以便代码在其他主机上的某些计算机上工作时,文件会不同,并且可能会失败。当客户端尝试连接到时,网络库会发出拒绝错误loopback@jdweng我试过了,结果也一样。AddressList[0]返回IPv6 addressConclusion,如果是C#thrift客户端,则套接字只能在thrift客户端之外初始化。谢天谢地,Thrift客户端接口实现了这一点。相同的客户端代码停止工作。同样,只有客户端C#-->服务器Python无法工作。在初始化过程中似乎缺少某些内容。有没有办法诊断它?你可以使用像wireshark或fiddler这样的嗅探器来捕获TCP消息。Pythone如果遇到异常,可以添加断点并查看python对象。我在python对象中找到了有用的信息来帮助调试问题。例如,我发现我的文件路径长度非常大,当我将代码从网络驱动器移动到c:\时,代码工作正常。您还可以将消息添加到python日志文件调试(net4log)中,以帮助确定问题或查看现有日志文件。只需在working case(C##-->C++)上使用过滤器“loop and tcp.port==9091”运行Wireshark即可。我希望看到捕获,因为它是有效的。没有什么我错过了什么吗?我说过客户端和服务器不能使用相同的IP。最好为服务器使用IPEndPoint localEP=new IPEndPoint(IPAddress.Any,port)。在任何情况下都能工作。环回有时由客户端使用,而IP.Any则在windows计算机上为服务器保留。环回设计的目的是为了测试远程机器的连接(使用ping)。
res0 = socket.getaddrinfo(self.host,
                                          self.port,
                                          self._socket_family,
                                          socket.SOCK_STREAM,
                                          0,
                                          socket.AI_PASSIVE | 
    socket.AI_ADDRCONFIG)
    ...
    self.handle = socket.socket(res[0], res[1])
    self.handle.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    if hasattr(self.handle, 'settimeout'):
     self.handle.settimeout(None)
    self.handle.bind(res[4])
    self.handle.listen(self._backlog)
    client, addr = self.handle.accept()
            //client
            IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
            IPAddress ipAddress = ipHostInfo.AddressList[1];
            IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);
            TcpClient tcpClient = new TcpClient();
            tcpClient.Connect(remoteEP);

            //Server
            IPEndPoint localEP = new IPEndPoint(IPAddress.Any, port);
            TcpListener listener = new TcpListener(localEP);
            listener.Start();