我看了你回答的聊天室程序,我也遇到了这个问题,想能不能请教一下? 10
我看了你回答的聊天室程序,我也遇到了这个问题,想能不能请教一下?我的recvfrom总是返回SOCKET_ERROR,调错误代码又说是0,成功执行了这个程序。部分代码:s...
我看了你回答的聊天室程序,我也遇到了这个问题,想能不能请教一下?我的recvfrom总是返回SOCKET_ERROR,调错误代码又说是0,成功执行了这个程序。
部分代码:
struct RECVPARAM//子线程入口函数参数结构体
{
SOCKET sock; //已创建的套接字
HWND hwnd; //对话框句柄
};
//进入子线程之前的代码
RECVPARAM p;
RECVPARAM* pRecvParam;
pRecvParam=&p;
pRecvParam->sock=sListen;
pRecvParam->hwnd=(HWND)this;
//pRecvParam->hwnd=(HWND)IDC_RecvShow;
//创建接收线程
HANDLE hThread= CreateThread(NULL, 0, RecvProc, (LPVOID)pRecvParam, 0, NULL);
//关闭该接收线程句柄,释放其引用计数
CloseHandle(hThread);
//子线程入口函数
DWORD WINAPI C网口通信Dlg::RecvProc(LPVOID lpParameter)
//入口函数,在dlg里设的静态的
{ SOCKET sock_rec=((RECVPARAM*)lpParameter)->sock;//参数
HWND hwnd_rec=((RECVPARAM*)lpParameter)->hwnd;
//delete lpParameter;//防止内存泄露。
SOCKADDR_IN addrFrom;
int len= sizeof(SOCKADDR);
//接收到的信息存储空间
char buf[256];
char tempBuf[300];
while (TRUE)
{
//接收数据
int retval=1000;
retval= recvfrom(sock_rec, buf, 256, 0, (SOCKADDR*)&addrFrom, &len);
if ( SOCKET_ERROR == retval )
{
::MessageBox(0, "接收失败 ",0,0);
//调取错误代码
int error = 0;
TRACE("接收错误: %d \n", (error = WSAGetLastError()));
break;
}
sprintf(tempBuf, "%s 说: %s", inet_ntoa(addrFrom.sin_addr),buf);
::PostMessage(hwnd_rec, WM_RECVDATA, 0, (LPARAM)tempBuf);
}
return true;
}
我能加您qq吗? 展开
部分代码:
struct RECVPARAM//子线程入口函数参数结构体
{
SOCKET sock; //已创建的套接字
HWND hwnd; //对话框句柄
};
//进入子线程之前的代码
RECVPARAM p;
RECVPARAM* pRecvParam;
pRecvParam=&p;
pRecvParam->sock=sListen;
pRecvParam->hwnd=(HWND)this;
//pRecvParam->hwnd=(HWND)IDC_RecvShow;
//创建接收线程
HANDLE hThread= CreateThread(NULL, 0, RecvProc, (LPVOID)pRecvParam, 0, NULL);
//关闭该接收线程句柄,释放其引用计数
CloseHandle(hThread);
//子线程入口函数
DWORD WINAPI C网口通信Dlg::RecvProc(LPVOID lpParameter)
//入口函数,在dlg里设的静态的
{ SOCKET sock_rec=((RECVPARAM*)lpParameter)->sock;//参数
HWND hwnd_rec=((RECVPARAM*)lpParameter)->hwnd;
//delete lpParameter;//防止内存泄露。
SOCKADDR_IN addrFrom;
int len= sizeof(SOCKADDR);
//接收到的信息存储空间
char buf[256];
char tempBuf[300];
while (TRUE)
{
//接收数据
int retval=1000;
retval= recvfrom(sock_rec, buf, 256, 0, (SOCKADDR*)&addrFrom, &len);
if ( SOCKET_ERROR == retval )
{
::MessageBox(0, "接收失败 ",0,0);
//调取错误代码
int error = 0;
TRACE("接收错误: %d \n", (error = WSAGetLastError()));
break;
}
sprintf(tempBuf, "%s 说: %s", inet_ntoa(addrFrom.sin_addr),buf);
::PostMessage(hwnd_rec, WM_RECVDATA, 0, (LPARAM)tempBuf);
}
return true;
}
我能加您qq吗? 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询