У меня проблемы с кодом c# tcp. Когда я запускаю сервер и клиент на одном компьютере, он прекрасно подключается. Но когда я запускаю клиент на другом P C или на телефоне, я получаю: Попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через определенный период времени, или установленное соединение не удалось, потому что подключенный хост не ответил. .
Вот код сервера:
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();
}
Я удалил большинство комментариев. Но это базовый c пример для 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));
.