推荐阅读:摘要:为了实现Linux与Windows跨平台通信,及时共享信息,构建了一个适用于跨平台的网络聊天室通信程序。先搭建跨平台通信环境,然后使用Socket套接字网络编程接口实现通信。整个系统采用客户机/服务器(C/S)模型,Windows客户端采用MFC框架编写,Linux服务
摘要:为了实现Linux与Windows跨平台通信,及时共享信息,构建了一个适用于跨平台的网络聊天室通信程序。先搭建跨平台通信环境,然后使用Socket套接字网络编程接口实现通信。整个系统采用客户机/服务器(C/S)模型,Windows客户端采用MFC框架编写,Linux服务器和客户端均采用C语言实现。通过测试,Linux和Windows的客户端可以成功连接到服务器,从而实现跨平台网络聊天功能。
关键词:Linux;Windows;套接字;客户机/服务器
中图分类号:TP319
0 引言
Linux是一个基于POSIX和UNIX的多任务、多用户、支持多线程的操作系统。Linux在众多方面表现出强大的优势,通常用在控制领域以提高系统性能。然而,目前使用最多的Windows操作系统图形界面友好,拥有良好的集成开发环境,操作简单,深受广大用户的喜爱。两种操作系统各有千秋,越来越多场合同时使用,这就出现了跨平台的通信问题。对此,本文通过Socket套接口来实现不同操作系统之间的实时聊天,运用C/S模式设计出Windows与Linux操作系统间可以互相通信的网络聊天室,本客户端可以显示其它客户端的消息,实现了信息的及时共享。
1 Socket编程原理与过程
1.1 Socket编程原理
Socket编程过程分为客户端和服务器端编程,大致通信过程如图1所示。
Socket编程过程首先需要创建套接字socket(),然后服务器端绑定套接字bind(),即将本地主机IP地址、端口号与创建的套接字绑定。绑定完成后进入监听状态listen(),等待客户端连接。客户端如果发起连接connect(),服务器和客户端的底层就进行三次握手接受连接accept()。连接成功后,双方就可以收发数据了。在此连接上使用send()函数发送数据,在连接的另一端使用rev()函数接收数据,这样,Socket就连接了两端的应用程序。套接字机制提供了一系列的系统调用函数,通过这些函数调用,应用程序就可以在掩盖通信协议细节的情况下实现网络传输。
2 通信环境搭建
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平台客户端设计
请求连接:新建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接口来开发网络通信程序。本程序实现了网络聊天室功能,服务器能向不同的客户端同时转发另一个客户端发来的消息,不同用户可对消息及时共享。经过测试,本程序达到预期效果。