请教一下为什么sendto的返回值一直是-1

xwj90620 2017-01-10 10:56:46
简单做了个套接字的程序,但是sendto的返回值一直是-1
用GetLastError得到的返回值是10038,不知道代码哪里出错了,求前辈们帮帮忙,

WORD ver;
WSADATA wsadata;
SOCKET st=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addr;
int sd=0;
char buf[100]={0};
int error=0;

ver=MAKEWORD(1,1);
if(WSAStartup(ver,&wsadata)!=0)
{
printf("加载套接字失败\n");
return 0;
}
if(LOBYTE(wsadata.wVersion)!=1||
HIBYTE(wsadata.wVersion)!=1)
{
WSACleanup();
printf("版本错误\n");
return 0;
}

memset(&addr,0,sizeof(SOCKADDR));
addr.sin_family=AF_INET;
addr.sin_port=htons(7894);
addr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");

strcpy(buf,"hello world");
sd=sendto(st,buf,strlen(buf),0,(SOCKADDR *)&addr,sizeof(SOCKADDR));
error=GetLastError();
if(sd!=SOCKET_ERROR)
printf("发送成功,发送%d个字符\n",&sd);
else
printf("发送失败\n");

closesocket(st);
WSACleanup();
return 0;
...全文
1146 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xwj90620 2017-01-11
  • 打赏
  • 举报
回复
引用 3 楼 jianwen0529 的回复:
网上找个例子先运行下,端口开大点,先启动服务端然后再启动客户端


我的程序基本是照着视频照抄的,视频上运行成功了,可是我这个却不行,换了好几个端口号了都不行,用netstat -ano检查端口,也没有被占用。接收程序在
bind(st,(SOCKADDR *)&addr,sizeof(SOCKADDR))
这里就返回-1,接收不到数据。代码跟视频比较很多次都不知道是什么问题,实在是没辙了。
幻夢之葉 2017-01-11
  • 打赏
  • 举报
回复
网上找个例子先运行下,端口开大点,先启动服务端然后再启动客户端
幻夢之葉 2017-01-11
  • 打赏
  • 举报
回复
xwj90620 2017-01-11
  • 打赏
  • 举报
回复
引用 5 楼 jianwen0529 的回复:
http://www.cnblogs.com/ayanmw/archive/2012/05/03/2480854.html 测试下这个!
感谢帮助,已经解决。我把SOCKET结构体赋值放在初始化前面了,所以socket函数没有调用成功
xwj90620 2017-01-10
  • 打赏
  • 举报
回复
引用 1 楼 jianwen0529 的回复:
你这个是客户端,但是你的服务程序呢
我是小白不太懂,服务程序是接收程序吗,接收程序我也写了,但是在bind绑定端口那里就挂了,错误代码也是10038
幻夢之葉 2017-01-10
  • 打赏
  • 举报
回复
你这个是客户端,但是你的服务程序呢

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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