77范文网 - 专业文章范例文档资料分享平台

操作系统程序设计论文

来源:网络收集 时间:2020-05-30 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

操作系统

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()用于服务器方面,将创建的套接字绑定到指定的地址

操作系统

IP和端口Port中。

头文件:

#include #include

在系统调用中的参数sockfd是套接字描述符;addressp是指向套接字结构的指针,其成员是来描述本地端口号和本地主机地址;而addrlen则是用来存储套接字实际使用的地址结构的字节数。

(3)侦听函数:listen()

在创建套接字之后,服务器端进程利用bind()将套接字绑定到它所侦听的地址。在任何客户端可以连接到新建立的服务器端口之前,服务器必须调用listen()等待连接。Listen()函数用在服务器方侦听客户端的请求。通常listen()会在socket()、bind()、之后调用,接着才调用accept()。

在系统调用中的参数sockfd是套接字描述符;backlog指明套接字侦听队列允许悬挂连接请求个数。对于返回值而言,调用成功则返回0,失败时返回-1。

(4)连接请求:connet()

客户端通过调用connet()将已创建的套接字和服务器监听套接字之间建立连接。

头文件:

#include #include

其中在系统调用中,参数sockfd是套接字描述符;addressp是指向套接字结构的指针;根据引用是面向连接还是面向非连接,addressp所包含的意义有所不同。面向连接时,addressp是与之通信的套接字地址;面向非连接时,addressp是数据传送到的地址;addrelen则是存储套接字实际使用的地址指针的大小。

(5)接受连接:accept()

在面向连接的服务器上执行完listen()以后,再执行accept()等待来自客户端的实际连接请求。当服务器收到客户端connet()的请求时,必须创建一个新套接字与客户端通信。 第一个套接字只用来建立通信,第二个套接字由accept()完成。

头文件:

操作系统

#include #include

在接受连接的系统调用中,addressp是指向协议传送地址的指针,是对sockaddr结构的引用。当连接成功时,addressp所指的结构会被系统填入远程主机的地址数据。

(6)数据的发送及接收:send()及recv()

在面向连接发送数据时,send()是用于将数据由指定的套接字传送给对方主机(TCP连接)。在系统调用中,参数msg是指向要发送数据的指针;len是发送数据的长度;flags是标志位,一般是0。

在面向连接发送数据后,recv()是用来接收远端主机指定的套接字传来的数据,并将数据存到由参数指向的内存空间。在系统调用中,参数buf是被接收数据要存储的地址;buf_len是接收数据的长度;flags是标志位,一般也是0。

3、基于TCP的套接字通信的系统流程

流式套接字(SOCK_STREAM)定义了一种可靠的面向连接的服务,实现了无差错、无重复的顺序数据传输。使用面向连接的套接字编程实现聊天程序,通信流程如图所示。

套接字通信工作过程如下:

(1)、服务器程序先启动,调用socket()建立一个套接字,然后调用bind(),将套接字和本地网络地址联系在一起,再调用listen(),使套接字做好侦听准备,并规定它的请求队列的长度,最后通过调用accept()来接收连接。

(2)、客户在建立套接字后,通过调用connet()和服务器建立连接。连接一但建立,客户机和服务器之间就会通过调用send()与recv()来发送和接收数据。最后待数据传输结束后,双方可调用close()关闭套接字。

4、聊天功能实现与测试

(1)、聊天界面创建成功

对于聊天的实现主要是服务器端和客户端两部分,因此聊天界面如图1所示,其中在图1 的左部分是服务器端,右部分是客户端。首先运行服务器端,输入相应命令后,服务器端等待客户端连接,这时在客户端同样输入相关命令,单击“回车”键就能

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库操作系统程序设计论文在线全文阅读。

操作系统程序设计论文.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/jiaoyu/1071179.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: