socket编程(一)使用SOCK_STREAM建立可靠通信

socket是我们用来进行网络编程的基本API,一般系统都提供了socket,unix以及类unix(Linux、mac)它们都提供了socket,不过不同平台还是有那点区别的,其中Windows区别最大了。本文的代码是在mac上测试通过的。

socket是一个应用层编程API,提供了tcp/ip四层模型的第三层传输层的TCP、UDP协议的数据传输方式。第二层网际层有IP协议,它本来是不可靠的协议,而TCP在它的基础上提供了可靠传输。UDP仍然提供不可靠传输。

两个进程若想通信,可以通过socket来进行,不管这两个进程在什么位置,只要它们的主机都实现了TCP/IP协议栈。

我们用网络地址(ip)+port来标识一个通信实体,A要找到B,只需要知道B的ip:port即可。若B处理的是TCP报文,那么A应该指定传输协议是tcp,要是指定个udp或则其它协议,那么B得到了传输层发给应用层的报文将是一个非TCP报文,B在传输层会丢弃这个报文。

传输层TCP报文只用到了port,网际层IP报文用到了ip地址,同时把TCP报文作为它的部分报文内容。

下面是TCP报文,有源port与目的port。报文本身说明了它是TCP报文,在socket中我们如果用TCP协议,那么我们要指定socket用TCP协议。

下面是ip报文,有源ip与目的ip。

根据上面两个报文我们可以看出socket不是一个工作在哪个层上的API,而是一个跨层的网络编程API,为应用层提供服务,我们可以开发一些网络层协议。

服务器端:

socket编程,流程很固定。TCP传输模式是服务器端先创建一个socket,然后把这个socket绑定到一个地址上。这个时候socket可以工作了,让它向tcp/ip协议栈请求一个监听服务并创建一个服务队列来接受那些请求。这个服务队列是什么样子的,我们看下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值