关于SOCKET的一些总结

    提到网络编程,始终离不开“套接字”,那什么是套接字?套接字,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程,底层的操作完全交给协议完成,我们不必去考虑具体实现。从数据类型来看,它仅仅是一个无符号整形数据。这里通信有可分为2种,一种是以TCP协议为基础的流式套接字(SOCK_STREAM);另外一种是以UDP协议为基础的数据报套接字(SOCK_DGRAM)。前者是面向连接的,可靠的,不重复的;后者是面向无连接的,不可靠,不保证不重复以及顺序,它的优点是实时性比较高,适合大吞吐量通信。两种类型的套接字进行通信时必须按照一定的顺序以及不同的步骤调用函数才能完成通信,无论哪种方式,都必须先加载套接字库并进行版本协商才能进行后面的操作。对于TCP的服务端,必须先(socket)创建套接字,然后绑定(bind),监听(listen),接收连接请求(accept)并返回一个套接字,用返回的套接字收发数据(recv/send),完成后返回等待下一次连接请求,最后关闭套接字。客服端的操作相对简单,先创建套接字,然后发送连接请求(connect),然后进行收发操作,完成后关闭套接字。对于UDP的服务端,先(socket)创建套接字,然后绑定(bind),然后接收数据(recvfrom/sendto),最后关闭,客服端不许要绑定.看过孙鑫老师讲的聊天室程序后,我遇到些疑惑,就是服务端真的不需要绑定吗?他们处理数据的顺序能不能变?再查过一些资料发现,如果按照上面的步骤进行,确实没问题,如果客服端不绑定,就必须先发送数据,这样协议就会自动进行绑定,因此不用显式的调用函数绑定;而如果客服端即不绑定,而且现调用函数(recvfrom)进行接收操作,就会出现问题,因为调用该函数,协议必须知道用哪个地址,哪个端口进行接收数据操作,因此必须将套接字绑定才行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值