项目:网络五子棋
出现的问题: 当客户端向服务器端发送消息(IP - PORT - NAME)时。服务器老是会接收1/3的消息。
解决方法:发现时包头发送时出现了错误。
</pre><pre name="code" class="cpp"><span style="white-space:pre"> </span>int nErrCode; //返回值
PACKETHDR packetHdr; //定义包头
packetHdr.type = type; //包类型
packetHdr.len = strData.GetLength();//数据长度
//发送包头
nErrCode = send(m_s, (char*)&packetHdr, PACKETHDRLEN, 0);
if (SOCKET_ERROR == nErrCode)
{
AfxMessageBox(L"发送用户列表错误!");
return FALSE;
}
//发送包体
USES_CONVERSION;
nErrCode = send(m_s,T2A(strData), packetHdr.len, 0);
if (SOCKET_ERROR == nErrCode)
{
AfxMessageBox(L"发送用户列表错误!");
return FALSE;
}
int nErrCode; //返回值
PACKETHDR packetHdr; //定义包头
packetHdr.type = type; //包类型
packetHdr.len = strData.GetLength();//数据长度
//发送包头
nErrCode = send(m_s, (char*)&packetHdr, PACKETHDRLEN, 0);
if (SOCKET_ERROR == nErrCode)
{
AfxMessageBox(L"发送用户列表错误!");
return FALSE;
}
//发送包体
USES_CONVERSION;
nErrCode = send(m_s,T2A(strData), packetHdr.len, 0);
if (SOCKET_ERROR == nErrCode)
{
AfxMessageBox(L"发送用户列表错误!");
return FALSE;
}
//客户端之间发送数据包
typedef struct _clientpacket
{
int type;//类型
u_short xPos; //水平位置
u_short yPos; //垂直位置
}CLIENTPACKET, *PCLIENTPACKET;
//线程函数参数
typedef struct _threadparam
{
HWND hClientHwnd;//主窗口句柄
BOOL *pRunning;//线程运行状态
WORD *pTotalEvent;//事件对象数量
WSAEVENT*pArrEvent;//事件对象数组
SOCKET *pArrSocket; //套接字句柄数组
HANDLE hEventExit; //线程退出事件句柄
}THREADPARAM, *PTHREADPARAM;