为什么我的sendto总是返回 -1 ?? 过路高手请留步!!
大虾你好:
情况是这样的:现有一电脑(client端)和一路由器(server端)相连。我在写一个server端
发送UDP数据报时运用了sendto 。但是返回值总是 -1 。Linux环境编译。
这段程序是在server端执行的,功能是收到client端包后就返回一个UDP包,可是为什么不行呢?
我看其他 人都是这么写的呀。
我是新手,回复时请简单易懂。拜谢!!!
int RecvAndSend_pack(void)
{
char buffer[10]={'a','b','c','d','e','f','g','h','i','j'};
int ret =0;
int socketfd;
struct sockaddr_in serveraddr;
struct sockaddr_in clientaddr;
int clientaddrlen = sizeof(clientaddr);
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(915); ///监听端口
serveraddr.sin_addr.s_addr = INADDR_ANY; /// 本 机
socketfd = socket( AF_INET , SOCK_DGRAM , 0 );
bind( socketfd , (struct sockaddr*)&serveraddr , sizeof(serveraddr) );//没问题
if (recvfrom( socketfd , buffer , sizeof(buffer), 0 ,
(struct sockaddr*)&clientaddr, &clientaddrlen) !=-1 )
{
//显示client 端信息; 正确显示(至少IP对的)
printf("Received datagram from %s : %u\n",
inet_ntoa(clientaddr.sin_addr),ntohs(clientaddr.sin_port) );
////给cilent发信息
ret = sendto(socketfd , buffer , sizeof(buffer), 0 ,
(struct sockaddr*)&clientaddr , clientaddrlen );
}
return ret;//返回 -1, 问题!!!!!
}
顺便说一下,在recvfrom之后如果执行clientaddr.sin_addr.s_addr = INADDR_ANY;
ret的值就是buffer的长度 10 了。但是这样是给server自己发啊,(我说的对不??)为什么给指定的地址发就不行呢???
就这么多分了。55555555