2011-12-29 82 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

您有多少客戶*嘗試*連接到該服務器? – 2011-12-29 00:26:48

+0

將您從'server.Accept()'獲得的值傳遞給新線程,並繼續接受' – 2011-12-29 00:32:11

回答

2

看起來像Accept()只會被調用一次。

所以一個客戶。

+0

請幫我做我所做的事情?編寫代碼。 – 2011-12-29 00:34:19

+2

你想做什麼?我還沒有看到。我以爲你只是想知道有多少客戶端可以連接... – sarnold 2011-12-29 00:39:15

+0

我想連接到服務器的第二個客戶端 – 2011-12-29 00:52:31

1

這一行後:

server = server.Accept(); 

監聽套接字不再被引用,作爲server變量現在指向一個可與連接的(一個)客戶端的插口。您也忽略來自該客戶端的斷開連接消息(當Socket.Receive()返回0時)。

Ps。你試圖更新我認爲是來自GUI線程以外的線程的列表框(lstserver),可能導致一個默默忽略的異常,並且不更新列表框。

相關問題