windows下 bind error  -- udp_马鸿凯_新浪博客

建议几个网站 我也顺便黏贴下来:
重要部分如下:
在windows 环境下为:
#include " winsock.h"
int PASCAL FAR bind( SOCKET sockaddr, const struct sockaddr FAR* my_addr,int addrlen);
在linux 环境下为:
#include "sys/types.h"
#include "sys/socket.h"
int bind( int sockfd , const struct sockaddr * my_addr, socklen_t addrlen);
参考部分如下:
Winsock 是 Windows下套接字标准
         
         1.UDP socket编程

         UDP(用户数据报协议)是一个无连接,不可靠的数据传输,其特点是简单,快捷。相比与TCP,UDP不需要建立连接(不需connect、accept函数),数据发送接收之后,不需要终止连接。基于UDP的程序,避免了TCP运行的开销,在效率与速度上具有更好的表现。
         UDP是无连接的,可能会有数据的丢失,延迟,这些需要应用程序自己处理。
         
         2.UDP基本函数
          
创建socket
         SOCKET  socket (int af, int type, int protocol);
         第一个参数af:  表示族地址,网络编程一般使用AF_INET宏。
         第二个参数type:  表示连接类型,TCP可选面向连接SOCK_STREAM,UDP数据报SOCK_DGRAM。
         第三个参数protocol:  表示协议,在使用AF_INET族地址UDP连接,设为IPPROTO_UDP。
绑定socket:
         int  bind(SOCKET s, const struct sockaddr *saddr,int namelen);
         第一个参数:  需要绑定的socket。
         第二个参数:  对应AF_INET,使用struct sockaddr_in包含协议,IP,端口等信息。(这个参数和百度百科有不同,为什么?)
         第三个参数:  对应AF_INET,使用struct sockaddr_in结构大小。
         该函数将socket与协议,IP地址,Port端口号绑定起来,相对于给socket“命名”唯一的标识,这样其他的进程就可以通过这个标识找到这个socket。
发送数据
         int  sendto(SOCKET s, const char  *buf,  int len,
                              int flags, const struct sockaddr  *to, int tolen);
         第一个参数:  socket为对方的socket。
         第二个参数:  发送数据的缓冲区。
         第三个参数:  数据缓冲区大小。
         第四个参数:  紧急状态,一般这为0。
         第五个参数:  可选,对应AF_INET,对方IP,端口等socket地址标识sockaddr_in。
         第六个参数:  可选,对应AF_INET,使用sockaddr_in结构大小。
         该函数用于UDP发送数据。
接收数据
         int  recvfrom(SOCKET s, char *buf, int len, 
                                  int flags, struct sockaddr *from, int *fromlen );          
         第一个参数:  socket为对方的socket。
         第二个参数:  接收数据的缓冲区。
         第三个参数:  数据缓冲区大小。
         第四个参数:  紧急状态,一般这为0。
         第五个参数:  可选,对应AF_INET,返回对方IP,端口等socket地址标识sockaddr_in。
         第六个参数:  可选,对应AF_INET,使用sockaddr_in结构大小。
         该函数用于UDP接收数据。
绑定socket
         int  bind(SOCKET s, const struct sockaddr *saddr,int namelen);
         第一个参数:  需要绑定的socket。
         第二个参数:  对应AF_INET,使用struct sockaddr_in包含协议,IP,端口等信息。
         第三个参数:  对应AF_INET,使用struct sockaddr_in结构大小。
         该函数将socket与协议,IP,端口号绑定起来,相对于给socket“命名”唯一的标识,这样其他的进程就可以通过这个标识找到这个socket。
关闭套接字
          int  closesocket(SOCKET s);
          参数为socket。
          该函数用于关闭套接字。
我的问题以及原因:
      在windows下的socket不是int类型的, 传递参数出现了问题,当做了int
当然在创建socket的时候也需要注意, 只不过我不是因为socket的原因导致监听失败.
 扩展下知识:
主要讲的是setsocketopt()的使用

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ma_Hong_Kai

微信 2936729162

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值