2011-12-29 3 views
-5

얼마나 많은 클라이언트가이 서버에 연결할 수 있습니까?얼마나 많은 클라이언트가이 서버에 연결할 수 있습니까?

private void btnserverconect_Click(object sender, EventArgs e) 
{ 
    Form1_Load(sender, e); 
} 

private void Form1_Load(object sender, EventArgs e) 
{ 
    try { 
     server = 
      new Socket(AddressFamily.InterNetwork, SocketType.Stream, 
        ProtocolType.Tcp); 

     //IPAddress local = IPAddress.Parse("127.0.0.1"); 
     EndPoint destination = new IPEndPoint(IPAddress.Any, 8000); 
     server.Bind(destination); 
     server.Listen(5); 
     Thread wait = new Thread(wa); 
     wait.Start(); 
    } 
    catch(Exception) { 
     MessageBox.Show("connection error !"); 
    } 
} 

void wa() 
{ 
    label1.Text = "please wait..."; 
    server = server.Accept(); 
    label1.Text = "connect"; 
    while (true) { 
     try { 
      byte[]by = new byte[100]; 
      int n = server.Receive(by); 
      lstserver.Items.Add("client :" + 
         Encoding.ASCII.GetString(by, 0, n)); 
     } 
     catch(Exception) { 
     } 
    } 
} 
+0

얼마나 많은 클라이언트가 해당 서버에 연결을 시도 했습니까? –

+0

'server.Accept()'에서 얻은 값을 새 스레드에 전달하고'Accept'를 계속하십시오 –

답변

2

Accept()은 한 번만 호출됩니다.

그래서 하나의 클라이언트. 이 선 후

+0

제가하는 일을 도와 주시겠습니까? 코드를 작성하십시오. –

+2

무엇을 하시겠습니까? 나는 아직 보지 못했다. 난 당신이 얼마나 많은 클라이언트가 연결할 수 있는지 알고 싶다고 생각 ... – sarnold

+0

서버에 두 번째 클라이언트에 연결하고 싶습니다 –

1

다음 server 변수가 이제 연결 (한) 클라이언트 회담 소켓을 가리키는으로

server = server.Accept(); 

청취 소켓이 더 이상 참조되지 않습니다. 또한 클라이언트에서 연결 해제 메시지를 무시합니다 (Socket.Receive()이 0을 반환 한 경우).

ps. GUI 스레드가 아닌 다른 스레드의 목록 상자 (lstserver)가 자동으로 무시 된 예외를 일으키고 목록 상자를 업데이트하지 않는다고 추측하는 내용을 업데이트하려고합니다.

관련 문제