作者learnerQQ (小铨)
看板C_Sharp
标题[问题] 请教各位 C#写聊天室 TCP_Client端的问题
时间Wed Apr 28 09:48:28 2010
如标题: //抱歉 字数颇冗长
*目的:
小弟想写一个 群体聊天的程式,使用C SHRAP做的.
所以会有一个 SERVER (MULTI THREAD) 和 多个 CLIENT 聊天者。
我用了C#基本的图形介面,也拉了许多介面图形,我想写一个 SERVER
可以连线许多CLIENT端的连线,而且每个CLIENT端可以输入聊天的讯息,
SERVER收到讯息後,会把此人的讯息传给每一个与SERVER建立连线的CLIENT
。如此 就好像 MSN or BBS 的群体聊天一样。
----------------------------------------------------------------------------------------------------
*问题
Question 1 :
我在Client 就遇到了问题,与 server建立连线後
我可以设定一个按钮 send 按下去後 会执行该片段程式码可以把资料传给 SERVER
的确没问题。
/* some code */
NetworkStream networkStream = socketForServer.GetStream();
System.IO.StreamReader streamReader =
new System.IO.StreamReader(networkStream); //收资料用
System.IO.StreamWriter streamWriter =
new System.IO.StreamWriter(networkStream); // 送资料用
String keyin = inputTextBox.Text //使用者输入的资料
streamWriter.WriteLine(keyin);
streamWriter.Flush();
networkStream.Close();
/* end of some code */
但是传完成一笔资料时,'再传' 资料就会有问题 = =+ 我只是一直执行这段程式码
方便找出问题:
我把SERVER收到的资料显示出来 没有错,但是第二笔资料以上就会收不到
甚至 c# client 还会出现 Error
#####################################################################
Question 2 :
Server回传给我的资料, 我要将他显示在对话视窗中 => textBox1
(这些来自其他CLIENT的讯息)
CODE: 送 //按下 Button 'send' 会执行
NetworkStream networkStream = socketForServer.GetStream();
System.IO.StreamWriter streamWriter = new System.IO.StreamWriter(networkStream);
String keyin = inputTextBox.Text; //读取使用者输入的字串
streamWriter.WriteLine(keyin); //送出给 server
streamWriter.Flush();
CODE: 收
NetworkStream networkStream = socketForServer.GetStream();
System.IO.StreamReader streamReader = new System.IO.StreamReader(networkStream);
String recv = streamReader.ReadLine();
showbox .Text =showbox.Text + recv; //累计之前聊天内容
问题是:
" 我如何在没打字聊天传资料给server的时段,不断收到SERVER传送的资料并
显示在聊天视窗 textBox1 ?? 背景作业?
甚至在我想输入资料个同时 也可以把资料传给SERVER 且不影响收资料的结果"
小弟很笨用了 while(true) 不停收资料,导致程式死当 = =+
------ 请各位大大给点高见吧 我想应该逃不掉要用背景作业 不停收资料了 .......
偏偏小弟很笨 还请多给点范例和解释 感激
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.47.79.72
※ 编辑: learnerQQ 来自: 114.47.79.72 (04/28 09:49)
1F:→ james732:关键字:多执行绪 04/28 10:05
2F:→ learnerQQ:两个问题都需要执行绪才能完成@"@? 04/28 10:21
3F:→ james732:多执行绪是回答你的第二个问题 04/28 10:22
4F:→ learnerQQ:恩 会很麻烦吗@"@ ? thx 04/28 10:29
5F:推 liaommx:有牵扯到网路的问题,务必使用thread,然後顺便提一个关键自 04/28 20:53
6F:→ liaommx:叫做委派,(delegrate) 因为跨执行绪不能存取元件 04/28 20:54
7F:→ liaommx:需要用这方法更改 04/28 20:54
8F:→ liaommx:版上有几个范例 04/28 20:54