Задать вопрос

В чем проблема TCP подключения?

Здравствуйте! Столкнулся с такой проблемой. Есть две приложухи: одна - это сервер, а вторая - клиент.
Когда обменивались по локалке, все работало, как только поставил сервер на сервер с виндой, вылетает ошибка, хотя IP и PORT указал верный..

Ошибка: System.Net.Sockets.SocketException: "Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера 18.220.144.236:8888"

Пробовал фаерволы на обоих компах отключать, не помогло.

Вот код клиента:

spoiler
using System;
using System.Net.Sockets;
using System.Text;
 
namespace ConsoleClient
{
    class Program
    {
        const int port = 8888;
        const string address = "18.220.144.236";
        static void Main(string[] args)
        {
            Console.Write("Введите свое имя:");
            string userName = Console.ReadLine();
            TcpClient client = null;
            
                client = new TcpClient(address, port);
                NetworkStream stream = client.GetStream();
 
                while (true)
                {
                    Console.Write(userName + ": ");
                    // ввод сообщения
                    string message = Console.ReadLine();
                    message = String.Format("{0}: {1}", userName, message);
                    // преобразуем сообщение в массив байтов
                    byte[] data = Encoding.Unicode.GetBytes(message);
                    // отправка сообщения
                    stream.Write(data, 0, data.Length);
 
                    // получаем ответ
                    data = new byte[64]; // буфер для получаемых данных
                    StringBuilder builder = new StringBuilder();
                    int bytes = 0;
                    do
                    {
                        bytes = stream.Read(data, 0, data.Length);
                        builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
                    }
                    while (stream.DataAvailable);
 
                    message = builder.ToString();
                    Console.WriteLine("Сервер: {0}", message);
                }
            
        }
    }
}


А вот код сервера: класс ClientObjects
spoiler
using System;
using System.Net.Sockets;
using System.Text;
 
namespace ConsoleServer
{
    public class ClientObject
    {
        public TcpClient client;
        public ClientObject(TcpClient tcpClient)
        {
            client = tcpClient;
        }
 
        public void Process()
        {
            NetworkStream stream = null;
            try
            {
                stream = client.GetStream();
                byte[] data = new byte[64]; // буфер для получаемых данных
                while (true)
                {
                    // получаем сообщение
                    StringBuilder builder = new StringBuilder();
                    int bytes = 0;
                    do
                    {
                        bytes = stream.Read(data, 0, data.Length);
                        builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
                    }
                    while (stream.DataAvailable);
 
                    string message = builder.ToString();
 
                    Console.WriteLine(message);
                    // отправляем обратно сообщение в верхнем регистре
                    message = message.Substring(message.IndexOf(':') + 1).Trim().ToUpper();
                    data = Encoding.Unicode.GetBytes(message);
                    stream.Write(data, 0, data.Length);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                if (stream != null)
                    stream.Close();
                if (client != null)
                    client.Close();
            }
        }
    }
}


И класс Program:
spoiler
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
 
namespace ConsoleServer
{
    class Program
    {
        const int port = 8888;
        static TcpListener listener;
        static void Main(string[] args)
        {
            try
            {
                listener = new TcpListener(port);
                listener.Start();
                Console.WriteLine("Ожидание подключений...");
 
                while (true)
                {
                    TcpClient client = listener.AcceptTcpClient();
                    ClientObject clientObject = new ClientObject(client);
 
                    // создаем новый поток для обслуживания нового клиента
                    Thread clientThread = new Thread(new ThreadStart(clientObject.Process));
                    clientThread.Start();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                if (listener != null)
                    listener.Stop();
            }
        }
    }
}

ОС Клиента Windows 7
ОС Сервера Windows 10

Версия .NET Framework - 4.5.2
  • Вопрос задан
  • 7841 просмотр
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
Какое конкретно устройство имеет адрес 18.220.144.236?
Скорее всего это адрес роутера, на котором работает NAT, он вам и мешает получить доступ. Нужно пробросить порт в настройках NAT на роутере.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы