여러 포트에서 수신 대기하는 서버가 필요합니다.여러 포트와 여러 클라이언트가있는 서버
여러 클라이언트가 각 포트에 연결할 수 있습니다. 연결 후, 서버 사용자는 각 클라이언트를 선택하여 텍스트를 전송할 수 있으며 클라이언트는이 텍스트에 응답합니다. 나는이 작업을 위해 스레드를 사용하지만, 여러 포트에서 수신 할 때 나는
을 말한다 오류가 발생하는 경우 "각 소켓 주소 (프로토콜/네트워크 주소/포트)는 하나만 사용은 일반적으로 허용됩니다."
어떻게이 문제를 해결하고 클라이언트가 서버에 연결하고 텍스트를 보내면 스레드에 액세스 할 수 있습니까?
내 소스 코드 : 당신은에/통과의 창조의 시간에 동의() 스레드 포트 번호를 신호 할 필요가없는 일부 '카운터'에 의하여 :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)));
}
}
}