操作系统程序设计论文

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Linux下基于套接字的简单聊天

程序设计

马鹏举(201341009)王萌(201341018)梁文龙(201341010)

(郑州科技学院信息工程学院)

【摘要】Linux作为一种自由和开放源码的类Unix操作系统,已经逐步受到众多编程者的信赖,而通过掌握Linux环境下利用套接字实现进程间高级通信的方法,运用套接字接口,结合多进程技术,实现服务器和客户端之间的一对一聊天或服务器转发实现客户端之间的多对多聊天程序。验证表明,该程序可以实现服务器和客户端之间的一对一的聊天互动功能。

【关键词】Linux;进程;套接字;通信交流

Linux based on the socket of the simple chat program design

Ma Pengju (201341009) Wang Meng (201341018) Liang Wenlong (201341010)

(Zhengzhou Institute of Science and Technology Information Engineering School)

【Abstract】Linux as a free and open source UNIX like operating system, trust has been subject to a number of programming, and through mastering the Linux environment using socket achieve interprocess advanced communication method, the use of socket interface, with multi thread technology, realization of server and client to a chat or server to forward the client between many to many chat program. The verification shows that the program can realize the chat between the server and the client.

【Keywords】the process; socket; communication

引言

Linux作为一种自由和开放源码的类Unix操作系统,引导着软件未来的发展方向。它的主要特点有:源代码完全开放;具有多用户的特性并且支持多进程;系统安全可靠性高;支持多平台等。正是鉴于Linux的这些特性,使其在服务器和众多企业开发和个人应用领域中越来越受欢迎。在Linux下基于套接字通信机制编程实现服务器与客户端之间的互动成为了众多研究聊天领域编程者的选择。

关于本次设计中的套接字来说,BSD Socket(伯克利套接字)是通过标准的UNIX文件描述符合其他程序通信的一个方法,目前已经被广泛运用到各个平台。而对于套接字通信,它是双向的,其数据格式为字节流(一对一)或报文(多对一,一对多);主要用于网络通信,并且支持client-server模式和peer-to-peer 模式,并且提供基于TCP或UDP协议的Internet域和UNIX局域网域的网络通信。

因此在本次课题设计就选择了在linux系统环境中完成,通过了解套并且利用套接字相关系统调用函数的使用,有关套接字的数据结构,以及在建立基于TCP套接字通信过程中,服务器和客户端的建立过程和步骤来实现进程间的通信。也就是说在本次设计中,主要研究是基于Linux平台的Internet域套接字的数据结构、函数及其应用。

1、关于聊天的设计

在设计过程中,牵涉到的数据结构主要是套接字结构,它会因为使用不同的通信协议而有不同的定义。在基于TCP协议的Internet域中,套接字的结构定义如下:

#include

struct sockarddr_in

{

unsigned short int sin_family; /*协议表示*/

unsigned short int sin_port; /*存储端口号*/

struct in_addr sin_addr; /*存储IP地址*/

unsigned char sin_zero[8]; /*8位保留字节*/

}

在本套接字数据结构的定义中,sin_family是协议族,在Internet域,TCP套接字编程中sin_family固定值是AF_INET;

sin_port存储端口号(使用网络字节顺序),数据类型是一个16位的无符号整数类型;sin_addr存储IP地址,IP地址使用in_addr 数据结构,关于in_addr的数据结构定义如下:

struct in_addr

{

unsigned long int s_addr;

};

并且,in_addr是按照网络字节顺序存储IP地址。

2、聊天功能过程的实现

聊天过程通过采用TCP协议下的网络通信模式实现,通过套接字(Socket)接口可方便的实现TCP传输协议完成数据网络的传输。而Socket是网络通信的基本构件,起着网络通信的端点作用,要实现在网络通信中端点之间的连接与数据的交换,在通信中必须要有客户与服务器这两个进程。不过在双方进行通信前,要先运行服务器端程序,等待客户的连接。服务器端开启后,就要做对套接字创建、绑定,侦听函数,对连接请求、接受,对数据的发送、接收以及最后对套接字的关闭等诸项工作,下面简单介绍几项相关工作:

(1)创建套接字:socket()

socket()用于建立一个新的套接字,指定使用协议,就是向系统注册,通知系统建立一个通信端口。

头文件:

#include

#include

系统调用格式:

int socket(int domain,int type,int protocol);

其中,参数domain表示所采用的地址类型,完全定义在

/usr/include/bits/socket.h内;参数type为新套接口的类型描述,取值是SOCK_STREAM,表示提供面向连接传输且可信赖的数据流;参数protocol用来指定socket所使用的传输协议编号,通常设为0,成功则返回一个socket描述符。

(2)绑定套接字:bind()

bind()用于服务器方面,将创建的套接字绑定到指定的地址

相关文档
最新文档