红联Linux门户
Linux帮助

关于Windows和linux用udp传输数据的疑问!

发布时间:2010-04-23 14:39:40来源:红联作者:dx2004025
我在linux下运行一个udp客户端程序,然后发数据,请问一下函数有什么不对的地方,请指教,发了windows那边用udp测试工具测试就是收不到,谢谢!
#include
#include
#include
#include
#include
#include
#include

#define PORT 2000 /* 监听端口 */
#define MAXDATASIZE 100 /* 缓冲区的大小 */

int main(int argc, char *argv[])
{
int fd, numbytes;
/* 存储接收到的消息 */
char buf[MAXDATASIZE];
/* 存储远程服务器的信息 */
struct hostent *he;
/* 服务器的地址信息 */
struct sockaddr_in server,reply;

if (argc !=3)
{ /* 用法 */
printf("Usage: %s \n",argv[0]);
exit(1);
}

if ((he=gethostbyname(argv[1]))==NULL)
{
printf("gethostbyname() error\n");
exit(1);
}

if ((fd=socket(AF_INET, SOCK_DGRAM, 0))==-1)
{
printf("socket() error\n");
exit(1);
}

bzero(&server,sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons(PORT);
server.sin_addr = *((struct in_addr *)he->h_addr);
/*发送消息至服务器*/
sendto(fd, argv[2], strlen(argv[2]),0,\
(struct sockaddr *)&server,sizeof(struct sockaddr));
while (1)
{
int len;
/*接收来自服务器的消息*/
if ((numbytes=recvfrom(fd,buf,MAXDATASIZE,0,\
(struct sockaddr *)&reply,&len)) == -1)
{
printf("recvfrom() error\n");
exit(1);
}

if (len != sizeof(struct sockaddr) || \
memcmp((const void *)&server, (const void *)&reply,len) != 0)
{
printf("Receive message from other server.\n");
buf[numbytes]='\0';
printf("Server Message: %s\n",buf);
break;
}
}
/*关闭套接字*/
close(fd);
return 0;
}
文章评论

共有 1 条评论

  1. zhandai325124 于 2010-10-21 11:30:08发表:

    {:3_109:}