UDP套接字问题

righthook8 2011-10-28 10:35:39
为什么下面这段代码运行的时候只打印main中的信息,而不打印线程函数中的信息

#include "stdafx.h"
#include "winsock2.h"
#include "windows.h"

#pragma comment(lib,"ws2_32.lib")

DWORD WINAPI ReceiveThread_Two(void* pData)
{
WSADATA wsaData;
WSAStartup(0x0202,&wsaData);
struct sockaddr_in ClientAddr;
struct sockaddr_in ServerAddr;

ClientAddr.sin_family = AF_INET;
ClientAddr.sin_addr.s_addr = htonl(INADDR_ANY);
ClientAddr.sin_port = htons(2000);

int iAddrLen = sizeof(ClientAddr);
SOCKET sockHdl = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
int iRet = bind(sockHdl,(struct sockaddr*)&ClientAddr,iAddrLen);
if (iRet != 0)
{
perror("Client Socket Bind Error");
}

while (1)
{
char BufTemp[100] = {0};
memset(BufTemp,0x00,sizeof(BufTemp));
int iRet = recvfrom(sockHdl,BufTemp,sizeof(BufTemp),0,(struct sockaddr*)&ServerAddr,&iAddrLen);
printf("2000:%s\n",BufTemp);
Sleep(500);
}

return 0;

}


int main(int argc, char* argv[])
{
DWORD dwThreadID = 0;
int iAddrLen = 0;
char BufTemp[100] = {0};
WSADATA wsaData;
WSAStartup(0x0202,&wsaData);
struct sockaddr_in ClientAddr_II;
struct sockaddr_in ServerAddr;

ClientAddr_II.sin_family = AF_INET;
ClientAddr_II.sin_addr.s_addr = htonl(INADDR_ANY);
ClientAddr_II.sin_port = htons(4000);

SOCKET sockHdl_II = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
int iRet = bind(sockHdl_II,(struct sockaddr*)&ClientAddr_II,iAddrLen);

CreateThread(NULL,0,ReceiveThread_Two,NULL,0,&dwThreadID);

while (1)
{
memset(BufTemp,0x00,sizeof(BufTemp));
iRet = recvfrom(sockHdl_II,BufTemp,sizeof(BufTemp),0,(struct sockaddr*)&ServerAddr,&iAddrLen);
printf("4000:%s\n",BufTemp);
Sleep(500);
}

return 0;

}


...全文
53 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
righthook8 2011-10-28
  • 打赏
  • 举报
回复
setsockopt第四个参数是怎么用的
righthook8 2011-10-28
  • 打赏
  • 举报
回复
大牛,查到错误了,是绑定4000端口时出错了,返回10048,地址重用了,
gameslq 2011-10-28
  • 打赏
  • 举报
回复
修改下recvfrom 第四个参数
iRet = recvfrom(sockHdl_II,BufTemp,sizeof(BufTemp),0,(struct sockaddr*)&ServerAddr,&iAddrLen);
改为

iRet = recvfrom(sockHdl_II,BufTemp,sizeof(BufTemp),MSG_PEEK,(struct sockaddr*)&ServerAddr,&iAddrLen);
righthook8 2011-10-28
  • 打赏
  • 举报
回复
当不开启发送数据的那一端时,为什么会出现上面的现象,是不是跟阻塞模式有关
righthook8 2011-10-28
  • 打赏
  • 举报
回复
哎,换个端口搞吧

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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