APP下载

基于Socket接口的Linux与Windows网络聊天室设计与实现

2015-06-24陈洁孟晓景

软件导刊 2015年6期
关键词:客户机服务器

陈洁 孟晓景

摘要:为了实现Linux与Windows跨平台通信,及时共享信息,构建了一个适用于跨平台的网络聊天室通信程序。先搭建跨平台通信环境,然后使用Socket套接字网络编程接口实现通信。整个系统采用客户机/服务器(C/S)模型,Windows客户端采用MFC框架编写,Linux服务器和客户端均采用C语言实现。通过测试,Linux和Windows的客户端可以成功连接到服务器,从而实现跨平台网络聊天功能。

关键词:Linux;Windows;套接字;客户机/服务器

DOIDOI:10.11907/rjdk.151230

中图分类号:TP319

文献标识码:A 文章编号:16727800(2015)006009403

作者简介作者简介:陈洁(1990-),女,山东菏泽人, 山东科技大学信息科学与工程学院硕士研究生,研究方向为计算机网络应用技术;孟晓景(1962-),男,浙江绍兴人, 山东科技大学信息科学与工程学院教授,研究方向为计算机网络。

0 引言

Linux是一个基于POSIX和UNIX的多任务、多用户、支持多线程的操作系统。Linux在众多方面表现出强大的优势,通常用在控制领域以提高系统性能。然而,目前使用最多的Windows操作系统图形界面友好,拥有良好的集成开发环境,操作简单,深受广大用户的喜爱。两种操作系统各有千秋,越来越多场合同时使用,这就出现了跨平台的通信问题。对此,本文通过Socket套接口来实现不同操作系统之间的实时聊天,运用C/S模式设计出Windows与Linux操作系统间可以互相通信的网络聊天室,本客户端可以显示其它客户端的消息,实现了信息的及时共享。

1 Socket编程原理与过程

1.1 Socket编程原理

Socket[1]作为BSD UNIX的进程通信机制,通常也称作“套接字”,用于描述IP地址和端口,是网络通信的基本单元。基于TCP/IP协议的 Socket 编程是一种典型的会话编程方式,它既适用于客户/服务器通信方式,又适用于点对点通信方式。套接字通过调用系统提供的库函数实现数据传输,不需要过多了解底层的一些细节。本文采用C/S[2]通信方式编程。通信服务方式分为面向连接和无连接,这里使用的是面向连接的流套接字。

1.2 Socket编程过程

Socket编程过程分为客户端和服务器端编程,大致通信过程如图1所示。

Socket编程过程首先需要创建套接字socket(),然后服务器端绑定套接字bind(),即将本地主机IP地址、端口号与创建的套接字绑定。绑定完成后进入监听状态listen(),等待客户端连接。客户端如果发起连接connect(),服务器和客户端的底层就进行三次握手接受连接accept()。连接成功后,双方就可以收发数据了。在此连接上使用send()函数发送数据,在连接的另一端使用rev()函数接收数据,这样,Socket就连接了两端的应用程序。套接字机制提供了一系列的系统调用函数,通过这些函数调用,应用程序就可以在掩盖通信协议细节的情况下实现网络传输。

2 通信环境搭建

本系统是跨平台网络聊天室,Linux为服务器端,用于接收客户端请求,而客户端可以是Windows操作系统,也可以是Linux操作系统。为避免使用多个计算机的麻烦,本系统在一台计算机上安装虚拟机,虚拟机为Linux操作系统,另外一个是Win7操作系统,在进行编程之前,要先检验Win7操作系统与Linux操作系统是否可以正常进行网络通信。把虚拟机端设置成桥接连接方式[3],这样虚拟机就可以当成独立机。主机IP地址为192.168.131.153 ,虚拟机地址为192.168.131.152,通过ping命令检验互通性。

3 跨平台通信设计

3.1 Linux平台服务器设计

通过此函数把消息发送给每个连接的客户端;服务端程序父子进程分别负责发送和接收数据,以避免数据冲撞;本程序服务端端口号设定为:3490,端口绑定函数int bindPort(unsigned short int port) ,此函数用来创建socket(AF_INET,SOCK_STREAM,0)流套接字,并绑定到指定的端口,在Linux操作系统下不需要初始化。

当有客户端请求连接时,accept(sockfd,(struct sockaddr*)&their_addr,&sin_size)用来接受客户端连接。连接成功后,服务器创建子进程,子进程ppid = fork()。父进程负责接收数据,子进程负责发送数据,把接收到的数据转发给已连接的客户端。

3.2 客户端设计

因为此程序为聊天室,所以客户端设计分为Windows平台和Linux平台。

3.2.1 Windows平台客户端设计

Windows客户端采用MFC框架来编写socket程序[4]。打开Visual C++6.0新建MFC应用程序,添加两个窗体,分别为登陆窗口和聊天室窗口。在登陆窗体中添加3个textBox控件,分别为textBox1(昵称输入框)、textBox2(服务器IP输入框)、textBox1(服务器端口号输入框),并添加两个button控件,分别为button1(登陆)、button2(退出)。在聊天室窗体中添加两个textBox控件,分别为textBox1(消息显示框)、textBox2(消息输入框),并添加两个button控件,分别为button1(发送)、button2(退出)。

请求连接:新建socket、ServerIP和Port分别表示服务器IP地址和端口号,通过函数Connect(ServerIP,Port)连接到Linux服务器端,成功以后即可收发数据。

发送与接收消息:定义发送的字符串为Message,将消息输入框textBox1中的内容指定为Message,通过send()函数进行消息发送。新建一个byte数组byte[] RecvBuffer,通过Recv(RecvBuffer)函数将接收到的消息存放到RecvBuffer中,接收成功后,将内容显示到显示框。

3.2.2 Linux平台客户端设计

Linux平台客户端使用C语言编写。首先创建客户端套接字clientfd = socket(AF_INET,SOCK_STREAM,0),第二个参数表明为流式套接字,即面向连接;然后请求连接服务器端,通过connect(clientfd,(struct sockaddr *)&clientaddr,sizeof(struct sockaddr))这个函数请求。连接成功后,创建子进程pid = fork(),父进程用于发送信息,子进程用于接收信息。

4 运行结果分析

4.1 启动Linux服务器端

4.2 启动Windows客户端

打开Visual C++编译、连接成功后,出现登录窗体,输入姓名、服务器IP地址和端口号,点击连接,和Linux端进行连接。此时用两个客户端进行测试。和服务器端连接成功后,Windows客户端和Linux客户端可以组建一个聊天室收发消息。以Windows其中的一个客户端为例,在消息输入框中输入消息,点击发送,Linux服务器端接收到消息,然后转发给其它客户端,3个客户端分别发送完消息后,Windows其中一个客户端显示内容如图3所示。

4.3 启动Linux客户端

在Linux系统下执行完上述命令后,客户端就和服务器连接了, Linux客户端可以一边发送

消息,一边接收服务器发来的消息,Linux客户端显示如图4所示。

5 结语

本文研究了Linux与Windows之间的通信问题。双方采用TCP/IP协议,运用socket接口来开发网络通信程序。本程序实现了网络聊天室功能,服务器能向不同的客户端同时转发另一个客户端发来的消息,不同用户可对消息及时共享。经过测试,本程序达到预期效果。

参考文献:

[1] 李峰.利用流式Socket编程实现Windows与Linux的通信[J].微计算机信息,2006(1):112118.

[2] 郭勇.利用Socket开发客户/服务器应用[J].广西师范大学:自然科学版,2000,18(1):2426.

[3] 周西峰,陆鹏,郭前岗. 利用流Socket实现Windows与Linux平台间的网络通信[J].微型机与应用,2013,32(18):4952.

[4] 多纳霍,卡尔福特.TCP/IP socket编程[M].陈宗斌,译.北京:清华大学出版社,2009.

责任编辑(责任编辑:杜能钢)

英文摘要Abstract:In order to achieve the crossplatform communication of Linux and Windows, and make information sharing timely,the article build a communication program of internet chatroom for crossplatform.First,it build environment of crossplatform communication , and then use network programming interface of socket.The whole system adopts a Client/Server(C/S) model, using MFC framework to write Windows client, Linux, including server and client, use C language to realize.It is tested that client of Linux and Windows can successfully connect to the server.Then it can realize the function of the crossplatform internet chatroom.

英文关键词Key Words: Linux;Windows;Socket;C/S

猜你喜欢

客户机服务器
通信控制服务器(CCS)维护终端的设计与实现
中国服务器市场份额出炉
得形忘意的服务器标准
计算机网络安全服务器入侵与防御
瘦客户机:安全与便捷的选择
升腾瘦客户机借神码翱翔“云端”
基于Web数据提高访问速度的方法