インターネット経由で接続する複数の winform クライアント用の小さなサーバーを作成しています。次のコードは、ローカル アドレスに設定されている場合に機能します。
サーバ:
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/にアクセスしましたが、Web サイトは実際に私のサービスを見ることができます。
この問題を解決するために何ができるか知っている人はいますか?
これは、サーバーが実行されているときの netstat の写真です。役に立つかもしれないと思った。