- 论坛徽章:
- 0
|
大家好,这是我写的一个Udp服务程序,比较简单。我在main函数中创建一个子进程,在子进程中调用它。客户程序先给它发"Are you jmj?",服务程序返回"yes"给客户程序。这个过程当客户和服务在同一网段时,比如:192.165.1.105和192.165.1.111是正确的;但不在同一网段时,比如:192.166.1.105和192.165.1.111则服务程序能收到"Are you imj?",但它的sento会返回-1,请问这是为什么?
void CreateUdp(void)
{
int sockfd;
int i;
struct sockaddr_in servaddr,cliaddr;
char mesg[BUFSIZE]; //BUFSIZE为1024
sockfd=socket(AF_INET,SOCK_DGRAM,0);
i=1;
setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,(CH *)&i,sizeof(int)); //CH为const char
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_BROADCAST);
servaddr.sin_port=htons(5050);
bind(sockfd,(SA *)&servaddr,sizeof(servaddr)); //SA为struct sockaddr
for(; {
int len;
int n;
len=sizeof(cliaddr);
bzero(mesg,BUFSIZE);
recvfrom(sockfd,mesg,BUFSIZE,0,(SA *)&cliaddr,&len);
printf("mesg=%s\n",mesg);
if(strcmp(mesg,"Are you jmj?" ==0){
n=sendto(sockfd,"yes",3,0,(SA *)&cliaddr,len);
printf("n=%d\n",n);
}
}
} |
|