定义了一套协议
其中每个类型的帧有命令类型,有协议的总长度,但是不知道怎么处理,因为协议长度不一样,每次的收如何处理
其中每个类型的帧有命令类型,有协议的总长度,但是不知道怎么处理,因为协议长度不一样,每次的收如何处理
解决方案 »
- 关于两个界面的按钮切换
- 无法定位程序输入点GdiGetImageGraphicsContext于动态链接库zlib1.dll上
- unicode下的CString转成wchar_t*的问题
- 有关创建进程、打开端口的问题。
- windows应用成序的logo画面如何做,而且要求显示3分钟,请大家帮忙,在线等待
- SplitterWnd窗口和TreeCtrl问题。
- 关于FTP的编程编程问题
- 哪里有VC++自画的 标尺 控件?谢谢
- 送分大行动!!6月中旬结账!我实在不想来了。
- mfc 引用CodeSoft 6 的lppx2.tlb ,出错了
- 打印位置问题
- 问一个较具挑战性的问题:如何调试位于onPaint或onDraw函数中的代码??
WINAPI RCARecv_EventSelectIO(
SOCKET s,
HANDLE hEventArray[2],
char* buf,
const int len
)
{
if( (buf == NULL) || (len==0) )
return FALSE;
int ret;
DWORD dwret;
int count = len;
int index = 0;
WSANETWORKEVENTS ns; while( count > 0 )
{
ret = recv( s, &(buf[index]), count, 0 ); if( ret == SOCKET_ERROR )
{
// 如果发送错误,并且错误代码不是"被阻塞", 则返回 FALSE ( 发生了网络错误 )
if( WSAGetLastError() != WSAEWOULDBLOCK )
return len - count; } else if( ret == 0 )
{
return len - count ; } else
{
// 如果成功发送, 则更新缓冲偏移字节数和待发总字节数
index += ret;
count -= ret;
continue;
}怎么修改这段代码成为可处理变长的呢
{
int len = 0, count, ret;
ret = recv(sock, &len, sizeof(int), 0);
(*int)buf = len;
count = ntohl(len);
buf += sizeof(int);
len = count - sizeof(int);
buflen = buflen - sizeof(int); while (len > 0)
{
ret = recv(sock, (void*)buf, len, 0);
if (ret != SOCKET_ERROR)
{
buf += ret;
len -= ret;
}
}
return (len <= 0) ? count : -1;
}大概这样,不太熟C