大家来看看,UDP小程序跑不起来!!!

longj 2004-10-22 03:02:32
Server 收不到消息!!!!!

//
// UDP Server
//

#include "stdafx.h"
#include <Winsock2.h>

int _tmain(int argc, _TCHAR* argv[])
{
SOCKET s;
WORD wVer;
WSADATA wsaData;
sockaddr_in sain, sact;
char buff[256] = {0};
int ilen1, ilen2, iRet;
HANDLE hRead, hEvents[1];

wVer = MAKEWORD(2, 2);

WSAStartup(wVer, &wsaData);

s = socket(AF_INET, SOCK_DGRAM, 0);
if( s == INVALID_SOCKET )
{
printf("error1\n");
}

sain.sin_family = AF_INET;
sain.sin_port = htons(7777);
//sain.sin_addr.S_un.S_addr = inet_addr("192.168.1.117");
sain.sin_addr.s_addr = INADDR_ANY;

//memset(&(sain.sin_zero), 0, 8);
printf("%d, %d, %d\n", s, sizeof(sockaddr_in), sizeof(sockaddr) );

iRet = bind(s, (sockaddr *) &sain, sizeof(sockaddr_in) );
if(iRet == SOCKET_ERROR)
{
printf("error2\n");
}

hRead = CreateEvent(NULL, FALSE, FALSE, NULL);

WSAEventSelect(s, hRead, FD_READ);

hEvents[0] = hRead;

while(1)
{
printf("等呀等..., %d\n",s );
WSAWaitForMultipleEvents(1, hEvents, FALSE, INFINITE, FALSE);

memset(buff, 0, 256);

ilen1 = recvfrom(s, buff, 256, 0, (sockaddr *) &sact, &ilen2);

//WSAEFAULT
printf("length=%d, %d, %s\n", ilen1, WSAGetLastError(), buff);
}

closesocket(s);

WSACleanup();

return 0;
}


//
// UDP client
//

#include "stdafx.h"
#include <Winsock2.h>
#include <string>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
SOCKET s;
WORD wVer;
WSADATA wsaData;
sockaddr_in sain, sact;
char buff[256] = {0};
int ilen1, ilen2;
string str = "依托是";

wVer = MAKEWORD(2, 2);

WSAStartup(wVer, &wsaData);

s = socket(AF_INET, SOCK_DGRAM, 0);

sain.sin_family = AF_INET;
sain.sin_port = htons(7777);
sain.sin_addr.S_un.S_addr = inet_addr("192.168.1.117");

memset(&sain.sin_zero, 0, 8);

ilen2 = sizeof(sockaddr);

ilen1 = sendto(s, str.c_str(), str.length(), 0, (sockaddr *) &sain, ilen2);

printf("length=%d, %d, %s\n", ilen1, WSAGetLastError(), str.c_str());

closesocket(s);

WSACleanup();

return 0;
}

...全文
123 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
longj 2004-10-22
  • 打赏
  • 举报
回复
哈哈,自己解决了,还是感谢大伙儿捧场!
danyueer 2004-10-22
  • 打赏
  • 举报
回复
cryptonym,楼主是在用事件选择模型!

不过好像这个模式用的不对哦,建议楼主还是先从阻塞模型开始吧,用阻塞形式的recvform.
cryptonym 2004-10-22
  • 打赏
  • 举报
回复
WSAWaitForMultipleEvents(1, hEvents, FALSE, INFINITE, FALSE);
写这个你想干什么用呀? 没人释放事件她怎么往下走呀?把这个delete了。


你的recvfrom 本身没有数据来就会堵塞了。

18,356

社区成员

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

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