我在使用c#tcp代码时遇到麻烦。 当我在同一台计算机上运行服务器和客户端时,它将正常连接。 但是,当我在另一台PC或电话上运行客户端时,我得到:连接尝试失败,因为一段时间后连接方未正确响应,或者由于连接的主机未能响应而建立连接失败。>
这是服务器代码:
private static void CreateServer()
{
TcpListener server = null;
try
{
Int32 port = 13000;
IPAddress localAddr = IPAddress.Parse("127.0.0.1");
server = new TcpListener(localAddr, port);
server.Start();
Byte[] bytes = new Byte[256];
String data = null;
while (true)
{
Console.Write("Waiting for a connection... ");
/*
IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
var ipAddress = ipHostInfo.AddressList;
Console.WriteLine(ipHostInfo.HostName);
Console.WriteLine(ipAddress[0]);
*/
TcpClient client = server.AcceptTcpClient();
Console.WriteLine("Connected!");
data = null;
NetworkStream stream = client.GetStream();
int i;
try
{
while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
{
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
Console.WriteLine("Received: {0}", data);
data = data.ToUpper();
byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);
stream.Write(msg, 0, msg.Length);
}
}
catch(IOException e)
{
//Console.WriteLine(e);
Console.WriteLine("Restarting Server");
//client.Close();
//CreateServer();
}
// Shutdown and end connection
client.Close();
}
}
catch (SocketException e)
{
//Console.WriteLine("SocketException: {0}", e);
}
finally
{
// Stop listening for new clients.
server.Stop();
}
Console.WriteLine("\nHit enter to continue...");
Console.Read();
}
我删除了大部分评论。但这是文档中tcp服务器的基本示例。
客户端连接代码非常简单:
tcpClient = new TcpClient();
tcpClient.Connect("192.168.0.7", 13000);
将tcpClient的声明保存在不太本地的位置,以保留并快速重新连接。
我尝试过的方法: 我已经确定IP地址正确,甚至转发了端口并使用了我的外部IP,但是遇到了同样的问题。 我确保防火墙不会阻止任何设备上的应用程序。 我尝试使用任一设备作为服务器。
我已经查找了问题,并且只有一个遇到此问题的人可以确保他输入了正确的IP并修复了防火墙设置。我可能错过了一些非常明显的东西。
最后一条信息,一台设备连接到路由器,我不知道这是否引起任何问题。
我尝试了另一件事:
tcpClient.Connect(new IPEndPoint(IPAddress.Parse("192.168.0.7"), 13000));
也是。
答案 0 :(得分:0)
我是对的。这对我来说是非常明显和愚蠢的。
在服务器端:
IPAddress localAddr = IPAddress.Parse("127.0.0.1");
不会导致服务器在其ipv4上进行监听,而是在ipv6上进行监听 所以你想要什么: 删除localAddr声明(因为它并不重要),而不是调用:
server = new TcpListener(localAddr, port);
致电:
server = new TcpListener(IPAddress.Any, port);
IPAddress。Any用于侦听设备具有的所有网络接口。