作者coldcoldday (CCD)
看板C_Sharp
标题Re: [问题] socket TcpLintener server端使用画面卡住
时间Tue Sep 29 23:13:32 2009
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
1F:推 horngsh:google 同步 非同步监听埠 asynchronous listening... 10/04 12:53