关于网络侦听的问题 public void control(){ if(msgs!="") { ListView.Items.Add(msgs); }} 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 每读取一行的话MSGS都为不为空呀!假如你只想出现一次的话定义个静态变量!当它为1的时候弹出对话框!否则不弹出! if(msgs!="" && count == 1) { MessageBox.Show(msgs); } 那么也就是说在netstream--ns中会一直存在数据?? ns=new NetworkStream(socketForClient);sr=new StreamReader(ns);这两句不应放在while里面,如果你放在里面,每次都会是新的netWorkStream新的StreamReader,这无法确定位置(NetworkStream.Position)。这里好像有逻辑矛盾,sr.Readline()是每当发现读到的byte[]里面有1310(\r\n),就往下执行,剩下的循环再读,如果接收的byte[]有多句话(many (\r\n 1310),自然要出现与之相当的对话框。如果要读一句就停止就把对话框写在同一个线程里面,这个线程就会在此停止(注意:这不是主线程,对话框不是用户必须填的,如果用户不理会,此线程会停在这里面,停时间长会使网络断开!)。所以我认为这要重新设计。可以考虑用异步方法(aSynchronous Programming)。 如果要实现接受的话,其实没有必要让两个线程来同时运行,最好的方式还是多写一个类,在子类中定义事件,如果读到一行数据激发事件调用父类的处理函数进行处理,也就是在你的程序中把 while(true) { ns=new NetworkStream(socketForClient); sr=new StreamReader(ns); msgs=sr.ReadLine(); }放到子类的方法中去,socket作为参数传给子类,在子类中用public deleget void GetData(object sender,string msg);public event GetData OnGetData;定义事件,然后通过执行OnGetData(object sender,msgs)来激发事件。public void control(){ if(msgs!="") { MessageBox.Show(msgs); }}这个函数用来处理数据,在调用子类前首先定义子类的事件的委托到这个函数即可实现 我一直搞不清楚:public void listening(){ TcpListener li=new TcpListener(516); li.Start(); socketForClient=li.AcceptSocket(); while(true) { ns=new NetworkStream(socketForClient); sr=new StreamReader(ns); msgs=sr.ReadLine(); }}那么当ns中只有一行的时候可以用sr读,如果有多行的话呢?还有就是ns这个网络流是会自动close()的吗,还是一直存在的?对不起,我写成public void listening(){ TcpListener li=new TcpListener(516); li.Start(); while(true) { socketForClient=li.AcceptSocket(); ns=new NetworkStream(socketForClient); sr=new StreamReader(ns); msgs=sr.ReadLine(); }}是为了多用户接入. 请大家指导一下winfrom的问题谢谢 WCF通信问题 高分求C#使用TCP发送或接收数据不全,数据重组 关于缓存数据的问题about iList 帮帮忙,串口通讯的问题,单步调试时正确接受回来12字节,但是正常运行时收回8字节! WebClient下载过程中取消下载后,无法删除部分下载的文件 请问学习.Net的方法是不是学习C#语言加是学习庞大的.Net类库? 求助:数据库链接封装后出现的问题 谁有XMLSPY的KEYCODE给我一个 很菜的问题。 请大家介绍以下C#的电子书籍 怎么写象ConnectionState.Open这样的结构啊?
假如你只想出现一次的话定义个静态变量!
当它为1的时候弹出对话框!否则不弹出!
if(msgs!="" && count == 1)
{
MessageBox.Show(msgs);
}
ns=new NetworkStream(socketForClient);
sr=new StreamReader(ns);这两句不应放在while里面,如果你放在里面,每次都会是新的netWorkStream
新的StreamReader,这无法确定位置(NetworkStream.Position)。这里好像有逻辑矛盾,sr.Readline()是每当发现读到的byte[]里面有1310(\r\n),就往下执行,剩下的循环再读,如果接收的byte[]有多句话(many (\r\n 1310),自然要出现与之相当的对话框。如果要读一句就停止就把对话框写在同一个线程里面,这个线程就会在此停止(注意:这不是主线程,对话框不是用户必须填的,如果用户不理会,此线程会停在这里面,停时间长会使网络断开!)。所以我认为这要重新设计。可以考虑用异步方法(aSynchronous Programming)。
while(true)
{
ns=new NetworkStream(socketForClient);
sr=new StreamReader(ns);
msgs=sr.ReadLine();
}
放到子类的方法中去,socket作为参数传给子类,在子类中用
public deleget void GetData(object sender,string msg);
public event GetData OnGetData;
定义事件,然后通过执行OnGetData(object sender,msgs)来激发事件。public void control()
{
if(msgs!="")
{
MessageBox.Show(msgs);
}
}
这个函数用来处理数据,在调用子类前首先定义子类的事件的委托到这个函数即可实现
public void listening()
{
TcpListener li=new TcpListener(516);
li.Start();
socketForClient=li.AcceptSocket();
while(true)
{
ns=new NetworkStream(socketForClient);
sr=new StreamReader(ns);
msgs=sr.ReadLine();
}
}
那么当ns中只有一行的时候可以用sr读,如果有多行的话呢?
还有就是ns这个网络流是会自动close()的吗,还是一直存在的?
对不起,我写成
public void listening()
{
TcpListener li=new TcpListener(516);
li.Start();
while(true)
{ socketForClient=li.AcceptSocket();
ns=new NetworkStream(socketForClient);
sr=new StreamReader(ns);
msgs=sr.ReadLine();
}
}
是为了多用户接入.