好的家伙我有一个非常奇怪的问题。 我创建了一个应该将令牌发送到C#服务器的Android应用程序。
这是android客户端代码实现。所以没什么奇怪的,这应该有用。 它应该做的是将令牌发送到服务器。服务器有一个监听器,它监听同一个端口(4444)
Socket s = new Socket(SERVER_ADDRESS, 4444);
output = new PrintWriter(new BufferedWriter(new OutputStreamWriter(s.getOutputStream())),false);
output.println(token);
output.flush();
output.close();
s.close();
这是服务器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);
}
}
此代码应捕获传入的套接字并将收到的令牌添加到List。
这应该有效,或者可能不应该有效。否则我没有发布这个问题。 但奇怪的是,它可以在我的个人笔记本电脑和其他一些电脑上运行,但它不能在我的客户端的桌面电脑上运行。
当我在客户端PC上执行服务器应用程序时,它不会收到客户端发送的任何数据。 现在我已经尝试了很多,所以我想我已经尝试了所有你能想到的最常见的解决方案,但没有结果。
让我展示一下我已经尝试过的东西: 在最初的几次尝试后,我们决定在桌面上进行全新安装,因此不存在任何可能出现问题的软件/设置,因此我在干净安装的Windows 10 X64系统上尝试了所有这些解决方案(我的系统是Windows 10 X64也是如此)
所以我可以得出结论是收到了包(因为netstat看到了em),但是在前往应用程序的某个地方它们会丢失,或者被阻塞,这看起来很奇怪,因为它不能防火墙应该允许他们。
我认为问题可能出现的另一件事是我使用的类。
我使用的TCPListener是一个高级类。我想过编写自己的TCPListener,但后来我想为什么它会在我的系统上运行而不是在我的客户端上运行。那是我需要你们的一点,因为我真的被困住了。 特别是因为它适用于某些系统,但不适用于其他系统。