udp编程
各位大哥帮我看看下面的代码为什么有什么问题吗?
服务器端:
#include <iostream.h>
#include <winsock2.h>
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
SOCKET sockets;
sockaddr_in sock;
sockaddr to;
char szStr[20];
int main(int argc, char argv[])
{
sock.sin_addr.s_addr = INADDR_ANY ;
sock.sin_family = AF_INET;
sock.sin_port = htons(5000);
sprintf(to.sa_data, "%s", "127.0.0.1");
to.sa_family = AF_INET;
int nLen = sizeof(to);
WSAData wsaData;
if(WSAStartup(2, &wsaData) != 0)
{
cout << "socket initial failed!" << endl;
return -1;
}
if((sockets = socket(AF_INET, SOCK_DGRAM, 0)) == INVALID_SOCKET)
{
cout << "build sockets failed" << endl;
return -1;
}
if(bind(sockets, (struct sockaddr*)&sock, sizeof(sock)) != 0)
{
cout << "bind failed!" << endl;
return -1;
}
sprintf(szStr, "%s", "okok");
for(int j=0; j<100; j++)
{
int i = sendto(sockets, szStr, sizeof(szStr), 0, &to, nLen);
cout << i << endl;
Sleep(1000);
}
}
客户端:
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <winsock2.h>
#include <windows.h>
#include "gtAlarmClnt.h"
SOCKET sockets;
char szBuf[1024];
sockaddr from;
int main()
{
from.sa_family = AF_INET;
sprintf(from.sa_data, "127.0.0.1");
int nLen = sizeof(from);
WSAData wsaData;
if(WSAStartup(2, &wsaData) != 0)
{
cout << "---socket initial failed!---" << endl;
return -1;
}
if((sockets = socket(AF_INET, SOCK_DGRAM, 0)) == INVALID_SOCKET)
{
cout << "---build sockets failed!---" << endl;
return -1;
}
fd_set fdR;
struct timeval timeout;
timeout.tv_usec = 0;
timeout.tv_sec = 10;
FD_ZERO(&fdR);
FD_SET(sockets, &fdR);
for(int i = 0; i<10; i++)
{
int j = select(sockets+1, &fdR, NULL, NULL, &timeout);
if((j != 0) && (j != SOCKET_ERROR))
{
recvfrom(sockets, szBuf, sizeof(szBuf), 0, &from, &nLen);
cout << szBuf << endl;
}
else
{
cout << "fail" << endl;
}
}
}
我的服务器在不断的发送消息,可是客户端总是收不到,这是怎么回事啊。
各位大哥拜托了。