linux套接字编程

      套接字是用来进行主机间通讯的,linux的socket和windows差不多,虽然有一定的区别,但是其基本原理与结构是一样的,因此,一台windows的主机可以和一台linux的主机通过套接字进行通讯。socket采用客户端与服务器端的模式使两台主机进行通讯。首先,服务器端调用函数socket新建一个套接字,该套接字只能由该进程所有。然后服务器段进程对socket进行命名,本地套接字将被赋予一个文件名,该文件通常保存在/tmp或者/usr/tmp下。对于网络套接字,名字将是一个与所连接的网络有关的能够被客户端连接上的端口号。套接字命名的函数是bind。然后服务器段调用函数listen来等待客户端的连接,并对进入的连接组成一个队列。服务器端调用函数accept接受连接。

      当连接被接受后,将新建一个套接字来进行与该客户端的通讯,而原来的套接字将保留以供进行和其它客户端的连接。

      客户端的socket连接更加直接,首先新建一个未命名的套接字,然后调用函数connect来对已经具有命名套接字的服务器端进行连接。

 

      套接字的性质主要分为三方面:域,类型和协议。

      域指定了socket通讯使用的网络媒介,最常用的socket域是代表互联网络的AF_INET,在该域下使用的协议是IP。AF_UNIX域适用于单独的一台计算机上的socket通讯,这种情况下使用的协议是文件输入/输出。还有AF_ISO和AF_XNS两种域分别对应于ISO标准网络和Xerox网络系统。

      套接字的类型包括:流和数据报。流类型的套接字与文件流类似,数据以连续的形式在两个主机之间进行传送。而数据报类型的套接字则对传送的数据的大小有限制。

      协议则与其所在的域有关。

 

      下面的例子演示了一个能够接受多个客户端的服务器程序,通过调用函数fork在主进程中复制一个子进程,将与特定客户端通讯的任务交给子进程,主进程仍然能够接受新的客户端的连接:

      1.首先引用必要的头文件和定义必要的变量

 

      2.创建客户端序列,忽略子进程的结束信息,等待客户端连接

 

      3.接受连接

 

      4.创建子进程,判断当前进程是否为子进程

 

      5.如果是子进程,则与客户端进行通讯

 

      6.否则,该客户端的工作已经完成,可以关闭与该客户端的连接

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值