帮我看看这段socket接受数据的代码有问题么?有的时候多了个“}”

ruolins 2013-08-21 09:46:51
 public static void OnDataReceived(IAsyncResult asyn)
{
SocketUser theUser = (SocketUser)asyn.AsyncState;
try
{
if (theUser.CurrentSocket == null)
{
// logger.Error("socket is null ");
return;
}
int iRx = theUser.CurrentSocket.EndReceive(asyn); //接收到的消息长度
if (iRx == 0)
{
// logger.Error("没有接收的数据,断开tcp连接");
throw new SocketException(10054);
}
//提取有效字节数据
byte[] data = new byte[iRx];
byte[] buff = theUser.DataBuffer;
for (int i = 0; i < iRx; i++)
{
data[i] = buff[i];
}
//数据处理
ProcessReceiveData(theUser, data);
//继续等待数据
if (isExit == false)
{
WaitForData(theUser);
}
}
catch (ObjectDisposedException ode)
{
// logger.Error("数据处理异常2" + ode.ToString());
}
catch (SocketException se)
{
if (se.ErrorCode == 10054)
{
// logger.Error("Tcp连接被关闭 " + se.Message);
ClientDisConnect(theUser);
}
else
{
// logger.Error("数据处理异常3" + se.ToString());
}
}
}
...全文
112 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ruolins 2013-08-21
  • 打赏
  • 举报
回复
  int iRx = theUser.CurrentSocket.EndReceive(asyn); //接收到的消息长度
if (iRx == 0)
{
// logger.Error("没有接收的数据,断开tcp连接");
throw new SocketException(10054);
}
//提取有效字节数据
byte[] data = new byte[iRx];
byte[] buff = theUser.DataBuffer;
for (int i = 0; i < iRx; i++)
{
data[i] = buff[i];
}


感觉这段代码有问题,这里读取字符的长度。。。
ruolins 2013-08-21
  • 打赏
  • 举报
回复
 public static void Send(byte[] buffer)
{
try
{
//目标地址
IPEndPoint ip = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 3001);
//发送通信socket
Socket sk = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sk.Connect(ip);//连接
sk.Send(buffer);//发送
SocketUser su = new SocketUser();
su.CurrentSocket = sk;
su.DataBuffer = buffer;
//异步接收
asyncCallBack = new AsyncCallback(OnDataReceived);//这里是什么意思???给客户端发送数据添加异步接收监听????
sk.BeginReceive(su.DataBuffer, 0, su.DataBuffer.Length, SocketFlags.None, asyncCallBack, su);

}
catch (Exception ex)
{
string msg = ex.ToString() + " " + DateTime.Now.ToString();
// logger.Debug(msg);
}
}
ruolins 2013-08-21
  • 打赏
  • 举报
回复
我应该要怎么弄确保发送过来的数据是全的?客户端我是flash发送过来的,我看了数据是完整的,
但是C#我用异步接受后多了个“}”导致解析数据出错。。。。不知道是什么 原因

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧