【发布时间】:2017-01-13 15:54:02
【问题描述】:
我想将 Android 上的 unity 应用程序与计算机应用程序连接起来。我可以在网络上运行它,但在互联网上它总是说机器拒绝连接。我已经关闭了windows的防火墙和杀毒,但是连接服务器和安卓客户端还是有问题:
No connection could be made because the target machine actively refused it.
代码如下:
服务器端:
TcpListener tcpListener;
Socket socket;
NetworkStream networkStream;
Thread thread;
string getIpAddress()
{
System.Net.IPHostEntry host;
string localIp = "";
host = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName());
foreach (System.Net.IPAddress ip in host.AddressList)
{
localIp = ip.ToString();
}
return localIp;
}
public void ReceiveImage()
{
try
{
IPAddress localAddr = IPAddress.Parse("95.171.54.53");
tcpListener = new TcpListener(localAddr, 53100);
tcpListener.Start();
socket = tcpListener.AcceptSocket();
networkStream = new NetworkStream(socket);
pictureBox1.Image = Image.FromStream(networkStream);
if (socket.Connected == true)
{
while (true)
{
tcpListener.Stop();
ReceiveImage();
}
}
}
catch(Exception ex)
{
string Message = ex.Message;
}
}
private void Form1_Load(object sender, EventArgs e)
{
thread = new Thread(new ThreadStart(ReceiveImage));
thread.Start();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
tcpListener.Stop();
thread.Abort();
}
这是客户端:
// Update is called once per frame
int frameSaveCount = -1;
int FrameCount = -1;
Socket socket;
NetworkStream networkStream;
Thread thread;
MemoryStream memoryStream;
TcpClient tcpClient;
BinaryWriter binaryWriter;
void Update()
{
// ...
if(FrameCount % 10==0)
{
// ...
send(bytes);
}
}
void send(Byte[] bytes)
{
try
{
print(getIpAddress());
tcpClient = new TcpClient("95.171.54.53", 53100);
networkStream = tcpClient.GetStream();
binaryWriter = new BinaryWriter(networkStream);
binaryWriter.Write(bytes);
binaryWriter.Close();
networkStream.Close();
tcpClient.Close();
}
catch (Exception exception)
{
string message = exception.Message;
print(message);
}
}
【问题讨论】:
-
服务器上是否有可能拒绝连接的防火墙?您可以在客户端上使用 telnet 连接吗?还是另一台任意机器?我会先检查服务器是否可达,然后继续调试客户端-服务器连接。
-
服务器是否实际托管在设置为托管服务器的网络上?
-
您的服务器端异常处理非常简陋。
-
如果我是你,我会隐藏你的 ip...
-
嗨,我已经尝试了很多,直到我发现通过网络连接两台计算机我们应该进行端口转发,但是我根本不知道!
标签: c# tcp network-programming tcpclient tcpserver