socket基础知识

      如果一个socket成功创建了,它存在于一个地址一个地址家族(socket函数的第一个参数即为地址家族),为什么要提供这个参数呢,因为Windows Sockets提供了一个与协议无关的编程接口,使得开发人员可以开发直接使用任何一种协议的网络程序。尽管如此,要实现网络通信定位和网络连接,为主机定址是必须得,bind函数就是干这个的。      另外在调用send/sendto时如果这是一个未绑定的socket,那么Windows Sockets会执行一个隐式的bind调用,系统会给其分配一个唯一值,并标记为绑定状态,可以通过getsockname 获取相关scoket name。因此在bind之前没有send/sendto之类操作,那么调用recv/recvfrom会得到10022的错误代码,即“提供了一个无效的参数”,也就是在socket没有绑定一个ip/port之前是不能接受数据的,联想到我们一般的C/S模式,S端都会先bind到一个ip/port,因为S是服务提供者,他不会主动发送数据,而是等待C来要求服务也就是发送数据,所以我们一般在C端不需要显示调用bind而是当send/sendto之类函数调用时,由系统绑定一个唯一的ip/port。对于S端我们一般都是指定一个固定的ip/port,而C端,MSDN上面的建议是最好让系统自动分配一个,可以在调用bind的时候可以将port设为0以免发生冲突。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值