SOCKET在同步传输文件时,可通过设置TIMEOUT监视数据发送或接收超时情况。请问下异步传输有监视的办法吗?特别是传输文件时,数据量比较大,有时要是其中一方断开了连接,代码中连错误都不报,这该怎么办啊? private void SendData(TcpClient t, string StrData)
{
byte[] byteData = System.Text.Encoding.Default.GetBytes(StrData); try
{
t.Client.BeginSend(byteData, 0, byteData.Length, 0,
new AsyncCallback(SendCallback), t);
}
catch (Exception e)
{
//return e.Message;
}
}这里是我写的发送数据的部分,在2用户建立连接后发送文件,可是接收方在断开连接的情况下,希望能够报错。但使用TRY--CATCH捕捉不到,请问下怎么回事啊?有什么办法捕捉到错误码?
{
byte[] byteData = System.Text.Encoding.Default.GetBytes(StrData); try
{
t.Client.BeginSend(byteData, 0, byteData.Length, 0,
new AsyncCallback(SendCallback), t);
}
catch (Exception e)
{
//return e.Message;
}
}这里是我写的发送数据的部分,在2用户建立连接后发送文件,可是接收方在断开连接的情况下,希望能够报错。但使用TRY--CATCH捕捉不到,请问下怎么回事啊?有什么办法捕捉到错误码?
解决方案 »
- 请问imagelist
- toolstripmenuitem控件中的图片绘制的原理是什么。
- 可空类型的转换问题
- C#中导出Excel表格,如何控制其中的数据格式
- 如何获得程序调用的相关的进程名
- 关于Hashtable 的问题,如何通过它的KEY得到它的值呢?谢谢
- 郁闷一上午了,dataview用了rowfilter,在grid里面编辑后datatable里面row竟然状态是unchanged!
- 我在执行GetProcessesByName提示"进程性能计数器已禁止"是怎么回事。?如何解决?
- Crystal Report 9.0 数据不能刷新的问题 (请各位大虾指点)
- 哪里有《Microsoft Visual C#.NET程序设计》电子文档下载
- C#的JSON反序列化
- ultraGrid 数值型字段排序问题
这个里面的方法才是最主要的回调你贴出来
数据接入:CMD为要发送的数据
public void SendCommand(string cmd)
{
try
{
Client.Client.Connect(Remote_Ipendpoint);
}
catch (Exception se)
{
//throw se;
}
try
{
SendData(Client, cmd);
}
catch (Exception e)
{
//return e.Message;
}
}异步回调函数:
private void SendCallback(IAsyncResult ar)
{
try
{
TcpClient client = (TcpClient)ar.AsyncState;
int bytesSent = client.Client.EndSend(ar);//如果成功返回发送的字节数,这里可能还需要加判断 //如果成功发送后开始接受数据
StateObject state = new StateObject();
state.workSocket = client;
client.Client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
new AsyncCallback(ReceiveCallback), state);
}
catch (Exception e)
{
//return e.Message;
} }确实如上面所说,错误会在SENDCALLBACK这个回调函数中出现,但是好像因为不是一个线程的问题,错误无法反馈到SendCommand这个函数中!
{
//链接中断
return;
}
if (bytesSent == 0)
{
//发送失败,断开链接
return;
}
//开始接收
//........
.net中已经有封装好的异步NET IO了,性能很好,用起来很方便,不需要自己再创建异步对象,你可以参考
IOCP