客户端发送UDP包,在接收端用抓包工具可以抓到包,而且数据内容也对,但是用recvfrom接收时程序停在recvfrom处

sokuaile 2016-07-02 08:57:33
大家好,我在进行网络编程时
客户端发送UDP包,在接收端用抓包工具可以抓到包,而且数据内容也对,但是用recvfrom接收时程序停在recvfrom处,一直执行不下去了,这是什么原因,求解? 我在一个套接字上绑定了三个线程,分别用于发送不同的数据
附上我客户端和服务器端的程序?


//服务器端
struct protoent *protoin; //协议有关类
struct sockaddr_in ipaddr; //地址
struct hostent *hostin; //主机
struct servent *servin; //服务器
int sock, type;
int nErrCode;
int uiRcvBuf; //接收缓存
int uiRcvBufLen = sizeof(uiRcvBuf); //接收缓存长度
int uiNewRcvBuf;

memset(&ipaddr,0,sizeof(ipaddr)); //清零
ipaddr.sin_family=AF_INET;

if(servin=getservbyname(service,transport))
ipaddr.sin_port=servin->s_port;
else if((ipaddr.sin_port=htons((u_short)atoi(service)))==0)
{
printf("get server information error\n");
WSACleanup();
exit(1);
}

if((protoin=getprotobyname(transport))==0)
{
printf("get protocol information error \n");
WSACleanup();
exit(1);
}
int a=WSAGetLastError();

if(hostin=gethostbyname(host))
memcpy (&ipaddr.sin_addr,hostin->h_addr,hostin->h_length);
else if ((ipaddr.sin_addr.s_addr=inet_addr(host))==INADDR_NONE)
{
printf("get host IP information error\n");
WSACleanup();
exit(1);
}
if (strcmp(transport,"udp")==0)
type=SOCK_DGRAM;
else
type=SOCK_STREAM;

sock=socket(AF_INET,type,protoin->p_proto); //创建套接字
nErrCode = getsockopt(sock,SOL_SOCKET,SO_SNDBUF,(char *)&uiRcvBuf,&uiRcvBufLen);
uiRcvBuf *= 30; //接收缓存,30有何意义?
nErrCode = setsockopt(sock,SOL_SOCKET,SO_SNDBUF,(char *)&uiRcvBuf,uiRcvBufLen);
getsockopt(sock,SOL_SOCKET,SO_SNDBUF,(char *)&uiNewRcvBuf,&uiRcvBufLen);
SOCKADDR_IN addrFrom;
addrFrom.sin_family=AF_INET;
addrFrom.sin_port=htons(6000);
addrFrom.sin_addr.S_un.S_addr=inet_addr(local_ip);
//绑定到本地ip地址和端口
int ret_val = bind(sock, (SOCKADDR*)&addrFrom,sizeof(SOCKADDR));//若无错误,则返回0

if(connect(sock,(struct sockaddr *)&ipaddr, sizeof(ipaddr))==SOCKET_ERROR)
{
printf("connect socket error! please start server first\n");
WSACleanup();
exit(1);
}
bytes=send(p->mSocket,send_buf,1285,0);

接收端
//创建套接字
mSocket1=socket(AF_INET,SOCK_DGRAM,0);
//获取套接字参数
nErrCode1 = getsockopt(mSocket1,SOL_SOCKET,SO_RCVBUF,(char *)&uiRcvBuf1,&uiRcvBufLen1);
uiRcvBuf1 *= 1000;
//设置套接字参数
nErrCode1 = setsockopt(mSocket1,SOL_SOCKET,SO_RCVBUF,(char *)&uiRcvBuf1,uiRcvBufLen1);
getsockopt(mSocket1,SOL_SOCKET,SO_RCVBUF,(char *)&uiNewRcvBuf1,&uiRcvBufLen1);
//绑定套接字
nErrCode1=bind(mSocket1,(struct sockaddr*)&ipaddr1,sizeof(ipaddr1));
//socket接收数据
recvlength1=recvfrom(m_RceLoop->mSocket1,(char*)recv_buf1,1024,0,
(LPSOCKADDR) &addr_cli, (int *) &addr_cli_len);
...全文
366 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhxingway 2016-07-05
  • 打赏
  • 举报
回复
p->mSocket, 和 m_RceLoop->mSocket1, 是什么东东?

4,354

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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