UPD socket的sendto函数卡死

bigtreeYoung 2019-03-21 11:46:26
请问各位大神,我在测试UPD通讯的时候,写了一个简单的服务器和客户端。
现在的情况是,客户端能成功发送数据到服务器,但是服务器在接到消息之后,再发送信息给客户端就卡死了,但是客户端和服务器使用的都是sendto函数啊。
服务器的接收如下:
sockaddr_in * MySocket::ReciveInfo(message * info) 
{
sockaddr_in from;
int addr_len = sizeof(struct sockaddr_in);
message reciveBuffer;

memset(&reciveBuffer, 0, sizeof(reciveBuffer));
addr_len = recvfrom(sock,(char * )&reciveBuffer,sizeof(reciveBuffer),0,(sockaddr *)&from,&addr_len);
if (addr_len == -1)
return NULL;
strcpy_s(info->info, (const char*)reciveBuffer.info);
strcpy_s(info->touser, (const char*)reciveBuffer.touser);
strcpy_s(info->user, (const char*)reciveBuffer.user);
info->typt = reciveBuffer.typt;
return &from;
}


先接收到客户端的套接字结构sockaddr_in,然后再根据这个客户端的套接字结构,使用以下函数发送。如下
short MySocket::Run(int msgTypt, char * userName, char* infoMsg, char* toUserName, sockaddr_in * clientIP)
{
short sRtn = false;
int addr_len = sizeof(struct sockaddr);
cout << "error1" << endl;
message sendBuffer;
sendBuffer.typt = msgTypt;
strcpy_s(sendBuffer.user, userName);
strcpy_s(sendBuffer.info, infoMsg);
strcpy_s(sendBuffer.touser, toUserName);
cout << "error2" << endl;
try
{
sRtn = sendto(sock, (const char *)&sendBuffer, sizeof(sendBuffer), 0, (const sockaddr *)clientIP, addr_len);
}
catch (...)
{
cout << "error" << endl;
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER| FORMAT_MESSAGE_FROM_SYSTEM| FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(),MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),(LPTSTR)&lpMsgBuf,0,NULL);
}
return sRtn;


调试的时候,客户端成功发送消息过来,服务器都能显示。
然后服务器在往外发送的时候,error1和error2都显示了,但是没有显示error,也就是没有触发异常,函数也没有返回,一直卡住。
请问有可能是什么原因呢??
...全文
707 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jx315425246 2019-05-04
  • 打赏
  • 举报
回复
回调不对oooooo
stherix 2019-03-22
  • 打赏
  • 举报
回复
虽然不知道你问题出在哪 第一个函数里 你return一个局部变量sockaddr_in from的地址,这是有问题的啊

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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