- 论坛徽章:
- 0
|
server代码如下,在linux上运行,如果clinet从同一台机器上发,server可以正常收到,如果从另一台机器上,不管是win还是linux,有时候收不到,有时候发10000个包,就收到1000个。为什么。
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/time.h>
int main(int argc, char* argv[])
{
int s = socket(AF_INET, SOCK_DGRAM, 0);
struct sockaddr_in sa;
struct sockaddr_in addr;
int addr_len = sizeof(struct sockaddr_in);
int len;
fd_set fdset;
char buf[1024],buffer[1024];
int nResult;
if( s < 0 )
{
return -1;
}
fcntl(s,F_SETFL,O_NONBLOCK);
sa.sin_family = AF_INET;
sa.sin_port = htons(9900);
sa.sin_addr.s_addr = inet_addr("192.168.1.9");
len = sizeof(sa);
if(bind(s,(struct sockaddr*)&sa, len) < 0)
{
return -1;
}
while(1)
{
FD_ZERO(&fdset);
FD_SET(s,&fdset);
nResult = select(s + 1,&fdset,NULL,NULL,NULL);
if(nResult < 0)
{
}
else if(nResult == 0)
{
}
else
{
if(FD_ISSET(s, &fdset))
{
recvfrom(s,buf,sizeof(buf),0,&addr,&addr_len);
}
}
}
} |
|