Я создаю небольшой сервер для нескольких клиентов winform, подключающихся к нему через Интернет. Следующий код работает, когда он установлен на локальный адрес:Исправление причины из исключения Socket в C#
Сервер:
static void Main(string[] args)
{
TcpListener serverSocket = new TcpListener(9000);
TcpClient clientSocket = default(TcpClient);
int counter = 0;
serverSocket.Start();
Console.WriteLine("Chat Server Started ....");
counter = 0;
while ((true))
{
counter += 1;
clientSocket = serverSocket.AcceptTcpClient();
byte[] bytesFrom = new byte[10025];
string dataFromClient = null;
NetworkStream networkStream = clientSocket.GetStream();
networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom);
dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));
clientsList.Add(dataFromClient, clientSocket);
broadcast(dataFromClient + " Joined ", dataFromClient, false);
Console.WriteLine(dataFromClient + " Joined chat room ");
handleClinet client = new handleClinet();
client.startClient(clientSocket, dataFromClient, clientsList);
}
clientSocket.Close();
serverSocket.Stop();
Console.WriteLine("exit");
Console.ReadLine();
}
Winform Клиент:
public partial class Form1 : Form
{
System.Net.Sockets.TcpClient clientSocket = new System.Net.Sockets.TcpClient();
NetworkStream serverStream = default(NetworkStream);
string readData = null;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
readData = "Conected to Chat Server ...";
msg();
clientSocket.Connect("127.0.0.1", 9000);
serverStream = clientSocket.GetStream();
byte[] outStream = System.Text.Encoding.ASCII.GetBytes(textBox3.Text + "$");
serverStream.Write(outStream, 0, outStream.Length);
serverStream.Flush();
Thread ctThread = new Thread(getMessage);
ctThread.Start();
}
}
Те кусок кода работает отлично разговаривать друг с другом по сети , Но когда я решил изменить эту строку кода
clientSocket.Connect("127.0.0.1", 9000);
в clientSocket.Connect("81.62.126.41", 9000);
мой IP-адрес он дает мне следующую SocketException:
A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
Таким образом, некоторые вещи, которые я пытался , Порт переадресации портов 9000, потому что я за моим маршрутизатором. Создание правил входящего и исходящего трафика для порта 9000. И я перешел на http://www.canyouseeme.org/, пока мой сервер запущен, и веб-сайт действительно может видеть мой сервис.
Кто-нибудь знает, что я могу сделать, чтобы решить эту проблему?
Вот скриншот netstat, когда сервер работает. Думал, что это может быть полезно.
Основываясь на вашем описании, что-то блокирует IP-пакеты на ваш хост или с вашего компьютера. Попробуйте использовать Wireshark или Microsoft Network Monitor для просмотра пакетов на вашем хосте, он должен указывать вас в направлении, где пакеты фильтруются. – William
@William Нет идеи, что это такое, но я проверю это. –
@William Я использую Wireshark, и мне удалось захватить пакет и информацию, которые я хочу, но я понятия не имею, что я должен искать. –