-1
我需要一個在多個端口上偵聽的服務器。具有多個端口和多個客戶端的服務器
多個客戶端可以連接到每個端口。連接後,服務器用戶可以選擇每個客戶端並向其發送文本,客戶端將響應此文本。 我使用的線程這份工作,但是當試圖監聽多個端口上時,我得到的是說
錯誤「只有一個使用的每個套接字地址(協議/網絡地址/端口)通常是允許的」。
如何解決此問題,以及在客戶端連接到服務器並向其發送文本後如何訪問線程?
我的源代碼:
private void activeToolStripMenuItem_Click(object sender, EventArgs e)
{
//for each port entered in list box,make a thread
if (ListBox1.Items.Count != 0)
{
activeToolStripMenuItem.Enabled = false;
inactiveToolStripMenuItem.Enabled = true;
for (i = 0; i < ListBox1.Items.Count; ++i)
{
serverThread = new Thread(new ThreadStart(StartServer));
serverThread.Start();
}
}
else
{
MessageBox.Show("You Should Add at least 1 port, to Listening Ports List.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private void StartServer()
{
counter = counter + 1;
string Remote_Host_IP;
int j = i - 1;
port = Convert.ToInt32(ListBox1.Items[counter]);
TcpListener listener = new TcpListener(IPAddress.Any, port);
listener.Start();
while (true)
{
mainSocket = listener.AcceptSocket();
// you'll need some more thread stuff down here.
if (mainSocket.Connected)
{
Connected_Num = Connected_Num + 1;
Remote_Host_IP = mainSocket.RemoteEndPoint.ToString();
this.Invoke(new MethodInvoker(() => AddConnection(Remote_Host_IP)));
}
}
}