论文部分内容阅读
摘要:在当今社会,网络已经成为了我们生活、生产中必不可少的一个要素。 因此,对于任何一个操作系统而言,对于网络的支持都是至关重要的。该文研究了 Socket 接口以及其在 Linux 环境下的通信网络模型。 希望通过本文的研究,能够为 Socket 在 Linux 环境下的应用提供一定的参考和借鉴。
关键词: Linux 环境; Socket ;网络通信
【分类号】TP316.81
1 引言
Linux是一个免费的类Unix操作系统,最初是由芬兰人Linus Torvalds于1991年开发。 Linux操作系统具有良好的稳定性以及强大的网络功能。Linux 系统平台被广泛应用到网络通信程序的开发中。网络通信编程要用到网络套接字(Socket)。Socket是一种描述符,它是网络通信的基本操作单元。数据传输是一种特殊的 I/O,提供了不同主机间的进程互相通信的端点,这些进程在通信前各自建立一个 Socket,并通过对Socket 的读写操作实现网络通信的功能。
socket通常也称作"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求。以J2SDK-1.3为例,Socket和ServerSocket类库位于java .net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。
2 Socket 接口概述
当前的网络应用中, Client 或者 Server 这两种模式是进行通信的双方使用频率最高的交互模式,在通常情况下,监听或者连接分别是客户以及服务器模式所采用的实现方式。 借助服务器端的应用程序在一个端口可以对发送至服务器的请求进行监听,换句话说,一般情况下,服务器的进程始终是出于休眠状态的,除非有客户向该服务器发送了一个连接的请求,在服务器一个端口接收到来自于客户的请求时,服务器线程就会从休眠状态转为工作状态,根据客户的具体请求做出相应的反应,提供客户所需要的服务。
Socket 接口是使用标准系统文件描述符与其他程序进行通信的一种非常重要的方式。 它的工作方式是由一个套接字描述作为一个通信连接的端口,不同的端口之间可以通过套接字来完成信息的发送和接收。上文已经描述了 Linux 系统能够支持多种网络协议,而由于不同的协议其工作的方式和地址格式都不相同,而对于不同的网络协议而言,使用用一个网络地址的格式,就可以称之为一个协议地址族,表 1是Linux 支持的常见的网络协议地址族。
在 Linux 环境下,能够将套接字地址族抽象成一个统一的套接字 Socket 接口,在该接口的支持下能够完成应用程序的接口的开发。 具体的,在 Linux 环境下 的 Socket 接 口 主 要 有 如 下 几 种 : 1) SOCK_STREAM , 数 据 流 套 接 口 ; 2) SOCK_DGRAM ,数据报套接口; 3) SOCK_RAW ,原始套接口。
表 1 套接字地址族
3 Socket 网络通信模型
3.1 Linux 环境下基于 Socket 的网络通信模型
从目前来看,主流的网络通信模型主要有两种,其一是 C/S 架构及,客户端 / 服务端架构;其二是 B/S 架构,及浏览器 / 服务端架构。 本文研究的是客户端 / 服务端架构,在该架构下的 Socket 网络通信模型需要完成客户程序编写和服务程序编写。
客户端程序的编写步骤如下:创建 Socket 接口 → 与远程服务程序连接 → 读写数据 → 终止连接。
服务程序的编写步骤如下: 创建 Socket 接口 → 绑定 bind 接口 → 设置 Socket 接口为监听模式 → 接受请求 → 读写数据 → 终止连接。
3.2 Socket 函数的调用
通过设计客户机/服务器模式程序来进一步深入分析socket 通信原理。server.c 和 client.c 使用流套接字将服务器的信息传递给客户机。server.c为服务端的实现。首先创造建套接字,通信域为PF_INET,然后调用bind 函数将指定的端口等到信息与套接字关联起来,调用 listen 函数实现对指定端口的监听。当有连接请求时,通过调用accept函数建立与客户机的连接,最后调用 write 和 read 函数来与客户机进行信息交换。client.c为客户端程序,实现较为简单。首先调用connect 函数来连接指定的服务器和端口,然后通过write 函数和read函数来实现与服务器之间的通信。
使用gcc编译server.c和client.c, 获得可执行文件server和client。
[root@localhost src]#gcc server.c -o server
[root@localhost src]#gcc client.c -o client
先执行 server,然后运行 client。 ./server portnumber& (portnumber 随便取一个大于 1204 且不在/etc/services 中出现的号码 就用8888好了),然后运行 。
[root@localhost src]# ./server 10284
[1] 13583
[root@localhost src]# ./client localhost 1028
Server get connection from 127.0.0.1 I have received: Welcome to HNCST!
4 结束语
在 Linux 系统环境之下,应用程序要与下层协议完成通信,需要借助 Socket 接口,本文研究了 Socket 接口的基本理论,介绍了在 Linux 环境下的数据流套接口,数据报套接口以及原始套接口。 在此基础上文章介绍了 Linux 环境下的 Socket 网络通信模型,以客户端 / 服务端架构模型为例研究了该模型实现过程中的 Socket 函数的调用。 希望通过本文的研究能够为 Socket 接口在 Linux 系统环境下的网络通信程序的设计和实现提供一定的参考和借鉴。
参考文献:
[1] 戴缘生,孙苓生;一种基于嵌入式Internet的新型智能仪表的设计[J];电气应用;2005年03期.
[2] 吴涛 , 黄心汉 , 黄振宇 . 基于 Linux 的多移动机器人通信的原理与实现方法 [J]. 电工技术 ,2003(12).
[3] 李海林,王美琴,高振明;基于Linux的802.11b无线局域网数据包捕获方法[J];计算机应用研究;2004年12期.
[4] 莫足琴 , 欧阳艳阶 , 马康 . 基于 Java Socket 多客户端并发通信聊天程序的设计与实现 [J]. 电脑知识与技术 ,2008(20).
关键词: Linux 环境; Socket ;网络通信
【分类号】TP316.81
1 引言
Linux是一个免费的类Unix操作系统,最初是由芬兰人Linus Torvalds于1991年开发。 Linux操作系统具有良好的稳定性以及强大的网络功能。Linux 系统平台被广泛应用到网络通信程序的开发中。网络通信编程要用到网络套接字(Socket)。Socket是一种描述符,它是网络通信的基本操作单元。数据传输是一种特殊的 I/O,提供了不同主机间的进程互相通信的端点,这些进程在通信前各自建立一个 Socket,并通过对Socket 的读写操作实现网络通信的功能。
socket通常也称作"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求。以J2SDK-1.3为例,Socket和ServerSocket类库位于java .net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。
2 Socket 接口概述
当前的网络应用中, Client 或者 Server 这两种模式是进行通信的双方使用频率最高的交互模式,在通常情况下,监听或者连接分别是客户以及服务器模式所采用的实现方式。 借助服务器端的应用程序在一个端口可以对发送至服务器的请求进行监听,换句话说,一般情况下,服务器的进程始终是出于休眠状态的,除非有客户向该服务器发送了一个连接的请求,在服务器一个端口接收到来自于客户的请求时,服务器线程就会从休眠状态转为工作状态,根据客户的具体请求做出相应的反应,提供客户所需要的服务。
Socket 接口是使用标准系统文件描述符与其他程序进行通信的一种非常重要的方式。 它的工作方式是由一个套接字描述作为一个通信连接的端口,不同的端口之间可以通过套接字来完成信息的发送和接收。上文已经描述了 Linux 系统能够支持多种网络协议,而由于不同的协议其工作的方式和地址格式都不相同,而对于不同的网络协议而言,使用用一个网络地址的格式,就可以称之为一个协议地址族,表 1是Linux 支持的常见的网络协议地址族。
在 Linux 环境下,能够将套接字地址族抽象成一个统一的套接字 Socket 接口,在该接口的支持下能够完成应用程序的接口的开发。 具体的,在 Linux 环境下 的 Socket 接 口 主 要 有 如 下 几 种 : 1) SOCK_STREAM , 数 据 流 套 接 口 ; 2) SOCK_DGRAM ,数据报套接口; 3) SOCK_RAW ,原始套接口。
表 1 套接字地址族
3 Socket 网络通信模型
3.1 Linux 环境下基于 Socket 的网络通信模型
从目前来看,主流的网络通信模型主要有两种,其一是 C/S 架构及,客户端 / 服务端架构;其二是 B/S 架构,及浏览器 / 服务端架构。 本文研究的是客户端 / 服务端架构,在该架构下的 Socket 网络通信模型需要完成客户程序编写和服务程序编写。
客户端程序的编写步骤如下:创建 Socket 接口 → 与远程服务程序连接 → 读写数据 → 终止连接。
服务程序的编写步骤如下: 创建 Socket 接口 → 绑定 bind 接口 → 设置 Socket 接口为监听模式 → 接受请求 → 读写数据 → 终止连接。
3.2 Socket 函数的调用
通过设计客户机/服务器模式程序来进一步深入分析socket 通信原理。server.c 和 client.c 使用流套接字将服务器的信息传递给客户机。server.c为服务端的实现。首先创造建套接字,通信域为PF_INET,然后调用bind 函数将指定的端口等到信息与套接字关联起来,调用 listen 函数实现对指定端口的监听。当有连接请求时,通过调用accept函数建立与客户机的连接,最后调用 write 和 read 函数来与客户机进行信息交换。client.c为客户端程序,实现较为简单。首先调用connect 函数来连接指定的服务器和端口,然后通过write 函数和read函数来实现与服务器之间的通信。
使用gcc编译server.c和client.c, 获得可执行文件server和client。
[root@localhost src]#gcc server.c -o server
[root@localhost src]#gcc client.c -o client
先执行 server,然后运行 client。 ./server portnumber& (portnumber 随便取一个大于 1204 且不在/etc/services 中出现的号码 就用8888好了),然后运行 。
[root@localhost src]# ./server 10284
[1] 13583
[root@localhost src]# ./client localhost 1028
Server get connection from 127.0.0.1 I have received: Welcome to HNCST!
4 结束语
在 Linux 系统环境之下,应用程序要与下层协议完成通信,需要借助 Socket 接口,本文研究了 Socket 接口的基本理论,介绍了在 Linux 环境下的数据流套接口,数据报套接口以及原始套接口。 在此基础上文章介绍了 Linux 环境下的 Socket 网络通信模型,以客户端 / 服务端架构模型为例研究了该模型实现过程中的 Socket 函数的调用。 希望通过本文的研究能够为 Socket 接口在 Linux 系统环境下的网络通信程序的设计和实现提供一定的参考和借鉴。
参考文献:
[1] 戴缘生,孙苓生;一种基于嵌入式Internet的新型智能仪表的设计[J];电气应用;2005年03期.
[2] 吴涛 , 黄心汉 , 黄振宇 . 基于 Linux 的多移动机器人通信的原理与实现方法 [J]. 电工技术 ,2003(12).
[3] 李海林,王美琴,高振明;基于Linux的802.11b无线局域网数据包捕获方法[J];计算机应用研究;2004年12期.
[4] 莫足琴 , 欧阳艳阶 , 马康 . 基于 Java Socket 多客户端并发通信聊天程序的设计与实现 [J]. 电脑知识与技术 ,2008(20).