C#服务器在某些pc上未接收套接字';s
好了,伙计们,我有个很奇怪的问题。 我已经创建了一个Android应用程序,它应该向C#server发送一个令牌 这是android客户端代码的实现。所以没什么奇怪的,这应该行得通。 它应该做的是向服务器发送令牌。服务器有一个侦听器,它侦听同一端口(4444) 这是服务器C#实现: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 =
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等待
- 可能更多的东西
特别是因为它在某些系统上有效,但在其他系统上无效 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);
}
}