Linux programming : Socket

***参考:《Linux程序设计 第4版》***

套接字(socket)是一种通信机制,它明确地将客户和服务器区分开来。套接字可以实现将多个客户连接到一个服务器。

套接字应用程序如何通过套接字来维持一个连接的?

服务器端:

1) 首先,服务器应用程序用系统调用socket来创建一个套接字,它是系统分配给该服务器进程的类似文件描述的资源,不能与其他进程共享

2) 接下来,服务器进程会给套接字起个名字。本地套接字的名字是Linux文件系统中的文件名,一本放在/tmp或/usr/tmp目录中。对于网络套接字,它的名字是与客户连接的特定网络有关的服务标识符(端口号或访问点)。这个标识符允许Linux将进入的针对特定端口号的连接转到正确的服务器进程。例如,Web服务器一般在80端口上创建一个套接字,这是一个专用于此目的的标识符。Web浏览器知道对于用户想要访问的Web站点,应该使用端口80来建立HTTP连接。我们系统调用bind来给套接字命名。然后服务器进程就开始等待客户连接到这个命名套接字。系统调用listen的作用是,创建一个队列并将其用于存放来自客户的进入连接。服务器通过系统调用accept来接受客户的连接。

3) 服务器调用accept时,它会创建一个与原有的命名关键字不同的套接字。这个新套接字只用于与这个特定的客户进行通信,而命名套接字则被保留下来继续处理来自其他客户的连接。如果服务器编写得当,它就可以充分利用多个连接带来的好处。Web服务器就会这么做以同时服务来自许多客户的页面请求。对一个简单的服务器来说,后续的客户将在监听队列中等待,知道服务器再次准备就绪。


客户端:

基于套接字系统的客户端更加简单。客户首先调用socket创建一个未命名套接字,然后将服务器的命名套接字作为一个地址来调用connect与服务器建立连接

一旦连接建立,我们就可以像使用底层的文件描述符那样用套接字来实现双向的数据通信。


记住:用完一个套接字后,就应该把它删除掉,即使是在程序因接收到一个信号二异常终止的情况下也应该这么做。这可以避免文件系统因充斥着无用的文件而变得混乱。

==========================================================================================

套接字的特性由3个属性确定:域(domain)、类型(type)和协议(protocol)。

“域”指定套接字通信中使用的网络介质。最常见的套接字域是AF_INET,它指的是Internet网络。此外,其他可用的域还包括:基于ISO标准协议的网络所使用的AF_ISO 域和用于施乐(Xerox)网络系统的AF_XNS域。

“类型”:Internet协议提供两种通信机制:流(stream)和数据报(datagram)。

流套接字由类型SOCK_STREAM指定,它们是在AF_INET域中通过TCP/IP实现的; 数据报套接字由类型SOCK_DGRAM指定,它们在AF_INET域中涌过UDP/IP实现的。

“协议”: 不同类型的套接字通过不同的协议实现,上述的TCP/IP 和UDP/IP都是相关的协议。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值