Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.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
C#服务器在某些pc上未接收套接字';s_C#_Android_Sockets_Packets - Fatal编程技术网

C#服务器在某些pc上未接收套接字';s

C#服务器在某些pc上未接收套接字';s,c#,android,sockets,packets,C#,Android,Sockets,Packets,好了,伙计们,我有个很奇怪的问题。 我已经创建了一个Android应用程序,它应该向C#server发送一个令牌 这是android客户端代码的实现。所以没什么奇怪的,这应该行得通。 它应该做的是向服务器发送令牌。服务器有一个侦听器,它侦听同一端口(4444) 这是服务器C#实现: CheckForIllegalCrossThreadCalls = false; String hostname = ""; System.Net.IPHostEntry ip =

好了,伙计们,我有个很奇怪的问题。 我已经创建了一个Android应用程序,它应该向C#server发送一个令牌

这是android客户端代码的实现。所以没什么奇怪的,这应该行得通。 它应该做的是向服务器发送令牌。服务器有一个侦听器,它侦听同一端口(4444)

这是服务器C#实现:

 CheckForIllegalCrossThreadCalls = false;
        String hostname = "";
        System.Net.IPHostEntry ip = new IPHostEntry();
        hostname = System.Net.Dns.GetHostName();
        ip = System.Net.Dns.GetHostEntry(hostname);

        foreach (System.Net.IPAddress listip in ip.AddressList)
        {
            IPAddress ipAd = IPAddress.Parse(listip.ToString());
            int port = 4444;
            tcpListener = new TcpListener(ipAd, port);
            if (listip.AddressFamily == AddressFamily.InterNetwork)
            {
                writeConsole("Server ip: " + listip);

            }
            writeConsole("Server listening to port: " + port);
            tcpListener.Start();
        }

        // Start listening for incoming data
        new Thread(connect).Start();
连接方法:

while (true)
        {
            serversocket = tcpListener.AcceptSocket();
            byte[] data_rec = new byte[1024];
            int k = serversocket.Receive(data_rec);
            writeConsole("Receiving client data");

            char cc;
            String mes = null;
            for (int i = 0; i < k - 1; i++)
            {
                cc = Convert.ToChar(data_rec[i]);
                mes += cc.ToString();
            }
            if (mes != null)
            {
                writeConsole("Client connected - token: " + mes);
                registrationIDList.Add(mes);

            }
        }
while(true)
{
serversocket=tcpListener.AcceptSocket();
字节[]数据_rec=新字节[1024];
intk=serversocket.Receive(数据记录);
writeConsole(“接收客户数据”);
char-cc;
字符串mes=null;
对于(int i=0;i
此代码应捕获传入套接字并将接收到的令牌添加到列表中

这应该行得通,也许不行。否则,我不会发布这个问题。 但奇怪的是,它可以在我的个人笔记本电脑和其他一些电脑上工作,但在我的客户机的台式电脑上不工作,我在那里制作了这个应用程序

当我在客户端pc上执行服务器应用程序时,它不会接收客户端发送的任何数据。 现在我已经尝试了很多,所以我想我已经尝试了所有你能想到的最常见的解决方案,但是没有结果

让我展示一下我已经尝试过的: 在最初几次尝试之后,我们决定在桌面上进行干净的安装,这样就不会有任何可能出现问题的软件/设置,因此我在干净安装的Windows 10 X64系统上尝试了所有这些解决方案(我的系统也是Windows 10 X64)

  • 禁用防火墙
  • 在防火墙中明确允许应用程序
  • 在高级防火墙设置中打开端口4444
  • 尝试其他端口
  • 检查系统是否接收到数据包(使用netstat)。结果:192.168.1.22:4444 androidxxxxxx关闭\u等待
  • 可能更多的东西
因此,我由此得出的结论是,软件包已被接收(因为netstat看到了em),但在通往应用程序的路上,软件包丢失了,或者被阻止了,这似乎很奇怪,因为防火墙不允许它们

我认为另一个问题可能是我使用的类

我用的是高水平的TCPListener。我想写我自己的TCPListener,但后来我想为什么它能在我的系统上工作,而不能在我客户的系统上工作。这就是我需要你们的原因,因为我真的被卡住了。
特别是因为它在某些系统上有效,但在其他系统上无效

c#应用程序绑定(LocalEndpoint)到正确的适配器/接口吗?IIRC保留默认值可以绑定到ipv6接口您可以发布侦听器初始化吗?客户端发送多少数据?如果数据大于1024字节的缓冲区大小,则服务器代码将不会接收整个消息。您需要围绕对
Receive()
的调用创建一个循环。使用HWCroup Hercules作为TCP服务器,而不是用于测试。使用Sysinternals TCPView监视连接。这可能会帮助你找到失败的原因。如果需要,还可以使用wireshark监控流量。上述3个程序是c#网络诊断的基本工具。此外,您还可以在Windows防火墙中启用日志记录。您调试和跳过代码的程度如何?您是否按预期获得控制台打印?程序是否甚至可能没有进入行为不端的PC中的循环?在等待传入连接之前添加另一条消息。
while (true)
        {
            serversocket = tcpListener.AcceptSocket();
            byte[] data_rec = new byte[1024];
            int k = serversocket.Receive(data_rec);
            writeConsole("Receiving client data");

            char cc;
            String mes = null;
            for (int i = 0; i < k - 1; i++)
            {
                cc = Convert.ToChar(data_rec[i]);
                mes += cc.ToString();
            }
            if (mes != null)
            {
                writeConsole("Client connected - token: " + mes);
                registrationIDList.Add(mes);

            }
        }