Re: [問題] socket TcpLintener server端使用畫面卡住
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
10/04 12:53, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):