| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 810 人关注过本帖
标题:异步接收程序的问题!
只看楼主 加入收藏
luochen601
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2006-10-23
收藏
 问题点数:0 回复次数:3 
异步接收程序的问题!
public UserClient(TcpClient client) //UserClient的构造函数
{
this._client = client;
ns = _client.GetStream();
ns.BeginRead(buffer, 0, buffer.Length, new AsyncCallback(streamReceive),null );
}
private void streamReceive(IAsyncResult ar) //回调函数
{
int BytesRead;
byte[] rcv;
BytesRead =ns.EndRead (ar);
if(BytesRead !=0)
{
rcv=new byte [BytesRead -1];
for (int i = 0; i < BytesRead; i++)
{
rcv[i] = buffer[i];
}
ns.BeginRead (buffer ,0,buffer.Length ,new AsyncCallback (streamReceive ),null );
}
}
这个程序有什么问题?为什么接收不了呢?
搜索更多相关主题的帖子: 异步 client BytesRead buffer 
2006-11-06 18:44
swc
Rank: 3Rank: 3
等 级:论坛游民
威 望:6
帖 子:394
专家分:83
注 册:2006-4-7
收藏
得分:0 
ns.BeginRead(buffer, 0, buffer.Length, new AsyncCallback(streamReceive),null );
我觉得是这个语句不对.最后一个参数不应该是NULL,应该是NetworkStream对象:ns
即为:ns.BeginRead(buffer, 0, buffer.Length, new AsyncCallback(streamReceive),ns );

try!

实践、学习、再实践、再学习......
2006-11-06 21:51
月夜枫华
Rank: 4
等 级:贵宾
威 望:12
帖 子:437
专家分:42
注 册:2006-1-2
收藏
得分:0 
最后一个参数只是传递给ar的ObjectState对象的,
请确保你已经建立了连接,并且Tcp的另一端有数据发送过来才会调用回调函数

2006-11-07 09:49
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
可以单步调试,看看你的函数运行了没有啊。

public void OnReceiveData(IAsyncResult ar)
{
ReceiveDone.Set();
Sock = (Socket)ar.AsyncState;
try
{
int nBytesRec = Sock.EndReceive(ar);
//据我猜测,到这一句话就已经是将byte流接入buffer里面了
//因为这里已经是接收字节流的回调函数了。这里的int nBytesRec已经有了长度。
//数据已经在buffer里面了。无需你再
//rcv=new byte [BytesRead -1];
// for (int i = 0; i < BytesRead; i++)
// {
// rcv[i] = buffer[i];
// }
ReceiveDone.Set();
if (nBytesRec > 0)
{
//判断长度大于零了,已经可以进行后续处理了。比如,我把他们转为string了。
string ss = Encoding.ASCII.GetString(Receive_Buffer, 0, nBytesRec);
listBox_Receive.Items.Add("接收:" + ss);
Sock.BeginReceive(Receive_Buffer, 0, Receive_Buffer.Length,
SocketFlags.None,
new AsyncCallback(OnReceiveData),
Sock);
//这里还有一个回调,注意以下,我用的是调用它的socket,sender
//如果是null我没有试过,但是最好还是不用null,具体机制我也不清楚。
ReceiveDone.WaitOne();
}

你看看我的程序,我是用的Socket,稍微有些区别。但是也是异步的。
可以参考下

2006-11-07 11:49
快速回复:异步接收程序的问题!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019285 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved