大虾你好:
情况是这样的:现有一电脑(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

解决方案 »

  1.   

    返回-1标明有错误产生,用GetLastError查看错误原因。就比较容易判断了。
      

  2.   

    这个时候client是否已经关闭了?
      

  3.   

    通过WSAGetLastError()的返回值可以在MSDN找到其错误原因.
      

  4.   

    to 楼上3位:
    先谢谢了
    我是在Linux下编译的不能用GetLastError() 之类的
    55
    client(my pc)端没关阿.
      

  5.   

    GetLastError()  似乎是c的库函数阿