为什么我的sendto总是返回 -1 ?? 过路高手请留步!!

roger_it 2005-11-18 10:48:01
大虾你好:
情况是这样的:现有一电脑(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
...全文
4566 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
roger_fei 2006-01-04
  • 打赏
  • 举报
回复
ding
快乐鹦鹉 2005-11-18
  • 打赏
  • 举报
回复
返回-1标明有错误产生,用GetLastError查看错误原因。就比较容易判断了。
roger_it 2005-11-18
  • 打赏
  • 举报
回复
问题已经解决,谢谢啦
原因是 路由表问题,测试时我的pc的IP不在 192.168.1.* 之内
呵呵,有做类似事情的注意一下吧以后
gnixemos 2005-11-18
  • 打赏
  • 举报
回复
GetLastError() 似乎是c的库函数阿
dingpiao 2005-11-18
  • 打赏
  • 举报
回复
Linux下 偶就不会了
roger_it 2005-11-18
  • 打赏
  • 举报
回复
to 楼上3位:
先谢谢了
我是在Linux下编译的不能用GetLastError() 之类的
55
client(my pc)端没关阿.
hill_world 2005-11-18
  • 打赏
  • 举报
回复
通过WSAGetLastError()的返回值可以在MSDN找到其错误原因.
gnixemos 2005-11-18
  • 打赏
  • 举报
回复
这个时候client是否已经关闭了?

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧