Re: [問題] socket TcpLintener server端使用畫面卡住

看板C_Sharp作者 (CCD)時間14年前 (2009/09/29 23:13), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串3/3 (看更多)
while(true) { TcpClient newClient = this.tcpListener.AcceptTcpClient(); Thread thread = new Thread(new ParameterizedThreadStart(this.clientThreadProc)); thread.Start(newClient); } ... .... ..... private void clientThreadProc(TcpClient newClient) { byte[] buffer=new byte[256]; //blocking try { while (newClient.getStream().Read(buffer, 0, buffer.Length) != 0) //無資料,但保持連線時 //會停在此行 { //開始對buffer讀取..... } } catch { //被客戶端強制斷線會有IOException } newClient.close(); } 類似這樣的架構..... ※ 引述《liunate ( )》之銘言: : ※ 引述《hsm926 (韓森慢)》之銘言: : : 如題我在寫server和client時,一旦server開始listener時 : : 視窗就會卡住,直到接受到client端的資料,並處理完之後 : : 關閉socket和timer才會恢復,並顯示運算結果… : : 這是我socket寫的語法 : : 一開始宣告 : : Socket socketForClient; : : TcpListener tcpListener; : : NetworkStream networkStream; : : StreamWriter streamWriter; : : StreamReader streamReader; : : 按start後,接下面 : : tcpListener = new TcpListener(1234); : : tcpListener.Start(); : 峎就沒碰,大概是這邊?當Server端開始監聽特定port時(tcpListener.Start) : 目前程式的執行序(Thread)就被佔用住了,所以才會造成你覺得視窗卡住的感覺 : 你可以參考一下TcpListener是否有非同步的監聽方法(StartXXX, EndXXX這類) : 如果想了解這種非同步的程式執行方式,還得看看MSDN相關文章囉 : : socketForClient = tcpListener.AcceptSocket(); : : networkStream = new NetworkStream(socketForClient); : : streamWriter = new StreamWriter(networkStream); : : streamReader = new StreamReader(networkStream); : : 接收並處理完之後 : : streamWriter.Flush(); : : timer1.Enabled = false; : : socketForClient.Close(); : : 麻煩專業的高手 幫忙解答…問題出在哪? : : 小弟能力不足,MSDN看不是很懂… -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.120.214.51

10/04 12:53, , 1F
google 同步 非同步監聽埠 asynchronous listening...
10/04 12:53, 1F
文章代碼(AID): #1AmYGVfE (C_Sharp)
文章代碼(AID): #1AmYGVfE (C_Sharp)