Linux_基于socket的局域网聊天软件的设计与实现
基于Socket接口的Linux与Windows网络聊天室设计与实现

基于Socket接口的Linux与Windows网络聊天室设计与实现作者:陈洁孟晓景来源:《软件导刊》2015年第06期摘要:为了实现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地址和端口,是网络通信的基本单元。
linux基于线程通信技术聊天室的设计与实现 -回复

linux基于线程通信技术聊天室的设计与实现-回复Linux基于线程通信技术聊天室的设计与实现聊天室是一种常见的在线交流工具,它允许用户在不同地点之间进行实时对话。
为了实现一个基于线程通信技术的Linux聊天室,我们可以选择使用已有的进程间通信(IPC)机制中的一种,例如共享内存或消息队列。
本文将一步一步回答有关该主题的问题,为您介绍如何设计并实现一个Linux聊天室。
第一步:确定需求和设计目标在开始设计之前,我们需要明确聊天室的需求和设计目标。
在这里,我们希望实现一个具有以下特点的聊天室:1. 实时通信:聊天室应该能够在用户之间进行实时的消息传递。
2. 多用户支持:聊天室应该允许多个用户同时登录和交谈。
3. 可扩展性:聊天室应该可以轻松地添加更多的用户和功能,以适应不同的需求。
4. 兼容性:聊天室应该支持Linux操作系统,并能够在不同的平台上运行。
第二步:选择合适的线程通信技术在设计线程通信聊天室时,我们可以选择使用多种IPC机制,如共享内存、消息队列、命名管道等。
根据聊天室的设计目标,我们可以选择使用共享内存和消息队列来实现聊天室的通信功能。
共享内存允许多个进程访问同一块内存区域,从而实现数据的共享。
通过在内存中创建一个共享缓冲区,我们可以在其中存储消息数据,并通过读写指针来实现消息的传递。
每个用户可以通过从共享内存中读取数据来接收其他用户发送的消息,并可以通过写入数据到共享内存来发送自己的消息。
消息队列是另一种常用的IPC机制,它可以实现进程之间的异步通信。
通过创建一个消息队列,每个用户可以将自己的消息发送到队列中,并从队列中接收其他用户发送的消息。
这种方式比共享内存更灵活,可以轻松地实现多用户的消息传递。
在这里,我们可以选择使用共享内存来存储聊天室的消息数据,并使用消息队列来处理消息的传递。
第三步:设计线程通信聊天室的架构在设计聊天室的架构时,我们需要考虑以下几个方面:1. 服务器:设计一个服务器线程,用于接收和处理用户的连接请求,并将消息分发给其他在线用户。
基于Socket网络聊天系统的设计与实现

摘要随着Internet的飞速发展,网络聊天以其操作简单、方便快捷、私密性好等优点已经迅速发展成为最普遍的网络交流方式之一,越来越受到人们的青睐,丰富了人们的网上生活。
开发并实现具有自身特色的网络聊天系统具有实际应用价值。
本网络聊天系统基于Java应用程序设计,以Client/Server为开发模式,以Eclipse为开发环境,以MySQL为后台数据库,利用JDBC连接数据库。
系统主要包括服务器模块和客户端模块,服务器模块能够对客户端发来的用户信息进行匹配、读取和转发;客户端模块能够进行注册、登录、聊天和文件传输。
系统不但实现了点到点的聊天,还利用Java提供的Socket类和多线程功能,在单个程序中同时运行多个不同进程,从而实现多点对多点的聊天。
总之,该聊天系统具有开放性,实时性,多话题交错等特点,方便了人们网上交流。
【关键词】网络聊天服务器模块客户端模块SocketABSTRACTWith the rapid development of Internet, network chat with its simple operation, convenient and gond privacy has quickly become the most popular way of communication networks, more and more people like it, enrich people's online lives. Development and Realization of the network chat system with its own characteristics and has practical application value.The Internet chat system is based on Java application, designed by Client / Server as the development of models, as Eclipse development environment, MySQL as the backend database, and using JDBC to connect database. The system includes server modules and client modules, server module can match users'data, read and forward the information which is sent by client; client module to regist, login, chat and file transfer. The system not only achieves peer-to-peer chat, but also use the Java provids Socket class and multi-threading capabilities, in a single program run different processes at the same time, in order to achieve multipoint chat.In short, the chat system is open, real-time and multi-topic staggered features, easy for people to communicate online.【Key words】Network Chat Client Module Server Module Socket目录前言 (1)第一章系统开发工具简介 (2)第一节客户机/服务器模型 (2)第二节JA V A简介 (3)第三节Socket简介 (4)第四节Eclipse简介 (7)第五节MySQL简介 (8)本章小结 (9)第二章系统分析 (10)第一节可行性分析 (10)第二节业务流分析 (11)第三节需求分析 (11)一、系统设计目标 (11)二、系统功能需求 (12)本章小结 (13)第三章系统概要设计 (14)第一节系统总体描述 (14)第二节模块设计 (15)第三节数据库设计 (16)一、设计原则 (16)二、具体步骤 (17)本章小结 (18)第四章系统实现 (20)第一节数据库模块实现 (20)一、数据流图 (20)二、数据库的连接 (20)第二节注册模块实现 (21)第三节登录模块实现 (23)第四节聊天模块实现 (24)第五节文件传输模块实现 (25)本章小结 (27)第五章系统测试 (28)第一节服务器模块测试 (28)第二节注册模块测试 (29)第三节登录模块测试 (30)第四节聊天模块测试 (31)第五节文件传输模块测试 (32)本章小结 (34)总结.............................................................................................错误!未定义书签。
基于Socket的网络聊天系统开发与设计

基于Socket的网络聊天系统开发与设计摘要近年来随着计算机技术的飞速发展,特别是Internet技术的发展,已经深刻的改变到了人们生活的方方面面。
这时过去的种种陈旧的通讯方式,都已经不能满足现代生活的需要。
人们希望能够用更低廉的价格,更加方便快捷的方式,来实现即时通讯。
这时开发一套基于Internet技术的网络聊天系统变得尤为重要。
本人以基于Java语言开发的网络聊天系统为实践基础,详细的介绍了聊天系统的功能设计和界面逻辑结构。
最终实现了一个可以实现私聊、群聊、传送文件的网络聊天系统。
本次设计主要以Socket网络通讯作为基础,并以Object作为通讯载体,同时运用了一定的通讯协议知识开发完成。
在界面方面,采用的是Java中的Swing技术来实现。
为了实现多用户的连接,在服务器端将采用多线程的技术来实现。
关键词:Java Socket 通讯协议Swing 多线程Socket-based web chat system development and designAbstractRecent years, with the rapid development of computer technology, especially Internet technology, has profound change to all aspects of people's lives. At this time all the old past, means of communication, have been unable to meet the needs of modern life. People want to use more low cost, more convenient and efficient way to achieve real-time communications. Then develop a network based on Internet technology, chat system becomes particularly important.I developed Java-based chat system based on practice, detailed description of the chat function of the system design and interface, logical structure. Ultimately can achieve a whisper, group chat, send files online chat system. This design mostly Socket network communication as the basis, and with Object as the communication carrier, while the use of a certain protocol to complete the knowledge development. In the interface, the use of the Java in the Swing technologies. To achieve multi-user connection, the server will use the technology to implement multithreading.Keywords:Java Socket Communication protocol Swing Multithreading目录一.绪论 (5)1.1课题背景 (5)1.2课题研究内容及意义 (5)1.3系统相关技术介绍 (6)1.3.1 Java语言概述 (6)1.3.2 TCP/IP协议 (7)1.3.3 Socket编程 (9)1.3.4 Swing简介 (11)1.3.5 多线程技术介绍 (12)二.系统需求分析 (16)2.1需求分析 (16)2.2可行性分析 (17)2.3.1 社会可行性 (17)2.3.2 用户可行性 (17)2.3.3 技术可行性 (17)2.3.4 经济可行性 (18)2.3系统开发环境 (18)三.系统总体设计 (18)3.1客户端与服务器的通信 (18)3.2客户端与客户端的通信 (19)3.3系统的架构模式 (20)四. 系统功能模块设计 (21)4.1服务器端的设计 (21)4.1.1 服务器等待连接线程设计 (21)4.1.2 服务器处理客户端信息线程设计 (22)4.2客户端设计 (28)4.2.1 客户端登录模块设计 (28)4.2.2 新用户注册模块设计 (29)4.2.3 客户端主界面模块设计 (29)4.2.4 点对点通信模块设计 (30)4.2.5 一对多通信模块设计 (30)4.2.6 点对点文件传输模块设计 (31)五.系统测试 (33)六.结束语 (33)七.参考文献 (34)一.绪论1.1 课题背景Internet是目前世界上最大的计算机互联网络,它遍布全球,并将世界各地不同规模和大小的网络连接成为一个整体。
linux基于线程通信技术聊天室的设计与实现 -回复

linux基于线程通信技术聊天室的设计与实现-回复Linux基于线程通信技术聊天室的设计与实现1. 引言(100字)在当今互联网时代,聊天室成为人们分享信息和交流思想的重要工具。
本文将介绍如何利用Linux中的线程通信技术实现一个基于线程通信的聊天室。
2. 设计与实现概述(200字)为了实现基于线程通信的聊天室,我们需要使用Linux中的线程库和进程间通信机制。
我们将设计一个多线程的服务器端和多线程的客户端,服务器端用于接收和处理客户端的请求,客户端用于向服务器发送消息和接收其他客户端的消息。
3. 服务器端设计与实现(500字)服务器端首先需要创建一个主线程,用于监听与接收客户端的连接请求。
一旦有客户端连接请求到达,主线程将创建一个新的工作线程,处理该客户端的请求。
在服务器端,我们可以使用线程锁和条件变量等线程同步机制,防止多个线程并发访问共享资源,实现线程间的安全通信。
我们可以创建一个线程池,用于管理工作线程,当有新的连接请求到达时,从线程池中获取一个空闲的线程进行处理。
我们使用线程锁来保护线程池中线程的访问,确保在某一时刻只有一个线程可以获取到线程资源。
为了实现服务器与客户端的实时通信,我们可以使用Linux中的socket 编程接口。
服务器将创建一个socket,绑定到特定的IP地址和端口上,然后开始监听来自客户端的连接请求。
一旦有连接请求到达,服务器将接受该连接并创建一个新的线程来处理客户端请求。
服务器通过socket接口读取客户端发来的消息,再将消息广播给其他连接到服务器的客户端。
4. 客户端设计与实现(500字)客户端需要创建一个连接到服务器端的socket,并提供用户界面用于发送和接收消息。
客户端主线程需要同时处理用户输入和服务器发来的消息。
客户端需要使用线程同步机制,确保在用户输入消息时,不会和服务器发来的消息产生竞争。
我们可以使用互斥锁来保护消息队列,当用户输入消息时,需要先获取互斥锁以确保消息队列的一致性。
Linux下基于Socket聊天软件的研究与实现

Linux下基于Socket聊天软件的研究与实现小组成员与分工明细 (5)第1章前言 (5)1.1 系统研究的背景与意义 (5)1.2 即时通讯软件的研究与应用现状 (5)1.3 开发环境简介 (6)1.3.1 Linux系统简介 (6)1.3.2 开发语言及编程工具简介 (6)1.4 TCP/IP协议简介 (7)1.4.1 TCP协议简介 (7)1.4.2 UDP协议简介 (8)第2章相关技术介绍 (9)2.1 Linux的SOCKET编程介绍 (9)2.1.1网络中进程之间如何通信 (9)2.1.2 Socket介绍 (9)2.1.3 Socket接口函数 (9)2.2 开源XML解析库简介 (11)2.2.1 TinyXML简介 (11)2.1.2 TinyXML的编译 (11)第3章系统需求分析 (13)3.1服务端 (13)3.1.1监听并建立客户端的连接 (13)3.1.2 数据库的增删查改 (14)3.1.3 在线用户的管理 (14)3.2客户端 (14)3.3 系统运行状态跟踪 (14)第4章系统设计 (14)4.1服务端 (14)4.1.1 接收客户端的连接 (14)4.1.2数据库设计 (15)4.1.3 聊天模块设计 (17)4.1.4 服务器与客户端之间的心跳模型 (18)4.2客户端 (19)4.2.1用户界面设计 (19)4.2.2 功能模块设计 (22)4.3 log日志 (22)第5章系统的实现 (22)5.1服务端的实现 (22)5.1.1服务器启动 (22)5.1.2监听客户端 (22)5.1.3服务器端与客户端连接成功 (23)5.1.4服务器端与客户端通信 (24)5.2 客户端的实现 (30)5.2.1与服务端建立连接 (30)5.2.2 用户注册实现 (31)5.2.3用户登陆实现 (35)5.2.5 用户查询修改信息实现 (36)5.2.6 用户聊天 (41)5.2.7 用户退出 (45)5.3 log日志模块的实现 (46)第6章部署运行 (49)结论 (50)小组成员与分工明细第1章前言1.1 系统研究的背景与意义在网络无所不在的今天,在Internet上,有ICQ、MSN、Gtalk、OICQ,QQ等网络聊天软件,极大程度上方便了处于在世界各地的友人之间的相互联系,也使世界好像一下子缩小了,不管你在哪里,只要你上了网,打开这些软件,就可以给你的朋友发送信息,不管对方是否也同时在线,只要知道他有号码。
基于socket的多人聊天程序设计与实现

一、概述1.1 背景介绍近年来,随着互联网的普及和发展,网络通信已经成为人们日常生活中不可或缺的一部分。
在网络通信中,聊聊功能更是用户最常使用的应用之一。
为了满足用户对于多人聊聊的需求,设计和实现基于socket的多人聊聊程序成为了亟待解决的问题。
1.2 研究目的本文旨在通过对基于socket的多人聊聊程序的设计与实现,探讨如何利用socket技术实现实时的多人聊聊功能,并且探索其中涉及的通信协议、数据传输、用户界面设计等方面的技术难点。
二、技术原理与实现步骤2.1 socket技术介绍在进行基于socket的多人聊聊程序设计与实现之前,首先需要了解socket技术的基本原理。
socket是一种在网络通信中广泛使用的技术,它允许通过特定的IP位置区域和端口号在计算机之间进行通信。
2.2 多人聊聊程序的架构设计设计一个稳定、高效的多人聊聊程序,首先需要对其整体架构进行设计。
在多人聊聊程序中,通常会涉及服务器和多个客户端之间的通信,因此需要考虑服务器的选择和客户端之间的连接方式。
2.3 数据传输与通信协议实现多人聊聊程序还需要考虑数据传输和通信协议的选择。
在设计中,需要确定何种数据传输方式和通信协议能够更好地满足多人聊聊程序的需求。
2.4 用户界面设计与交互体验在实现多人聊聊程序的过程中,用户界面的设计及交互体验也是至关重要的一环。
一个易用、美观的界面设计能够提升用户体验,增强程序的吸引力。
三、实现过程与技术难点解析3.1 服务器端程序设计实现多人聊聊程序的第一步是设计并实现服务器端程序。
在服务器端程序设计中,需考虑并发连接的处理、用户消息的路由、状态管理等问题。
3.2 客户端程序设计客户端程序是用户与服务器进行交互的主要部分,因此其设计需考虑用户登入注册、消息发送接收、显示处理、系统提示等功能。
3.3 数据传输及通信协议选择在实现多人聊聊程序的过程中,需要选择合适的数据传输方式和通信协议。
针对不同的需求和场景,选择不同的数据传输方式和通信协议能够更好地满足多人聊聊程序的需求。
基于Socket的网上聊天室设计与实现

2 Socket 通信实现
利用 J ava 的多线程机制可以非常方便 的实现并发服务 。每当服务器主程序创建一 个新的套接字连接时 (即成功调用了 accept () 方法) ,会启动一个新的线程来负责本服务 器和该客户之间的连接 ,主程序将返回并等 待下一个连接 。ThreadedCht Handle 类是从 Thread 类衍生出来的处理聊天过程的子类 , 它的 run () 方法包括了服务器和客户的通信
字3/
private String host ;
private boolean connected = false ;
public boolean is Connected () {return connected ;}
public Client (ChatApplet applet) { t ry{ host = applet . getDocumentBase () . get Host () ; / / host = ”2021115141246”; Socket = new Socket (host Server. port) ; / 3 与服务器建立连接 ,如果该连接未被创
Content - T YPE :text/ html 〈空行〉
……
然后服务器关闭 Socket 联接 。 (3) 浏览器收到以上 ht ml 文件后 ,将会 依次打开三个联接 (其中的 $sid 和 $encrypt pass 是变量) :
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
提交日期:2012-06-20 基于socket的局域网聊天软件的设计与实现1.实验目的《Linux操作系统课程设计B》是一门在课程《Linux操作系统与程序设计B》后独立开设的实验课程。
这一门实验课程的开设目的是为了通过学生独立完成一个基于Linux平台的较大型应用程序,巩固课堂上学到的Linux平台上的编程规范、技术和技巧,培养学生的编写较大型程序的能力和提高学生综合应用素质。
本课程设计实验主要围绕Linux平台上主流的基础技术展开,这些技术包括:Linux的进程、线程通信和同步技术;socket网络通信技术等,这些技术可以集中体现并应用在并发程序设计中。
通过并发程序的设计与开发,培养学生底层软件开发的能力,并为将来从事UNIX/Linux平台开发、嵌入式开发等相对高端的软件开发工作打下基础。
2.软件功能及模块划分本软件是一个linux下基于socket的聊天室程序,能让局域网内的用户通过该软件进行简单的文字通信。
在此基础上增加了1.聊天室成员之间的发送私聊信息;2.当新的成员加入后能自动收取最近一段时间内的聊天上下文;3.用户能够查看历史聊天记录;4.软件界面基于Qt实现,图形化界面方便用户操作。
主要模块划分:服务端:数据包发送和接受模块,聊天记录数据库读写模块,数据包处理模块,聊天记录查询模块客户端:数据包发送和接受模块,数据包处理模块,聊天记录查询模块,用户界面与展示模块3.设计与实现3.1系统概述与总体结构本系统采用CS架构,服务端采用固定的端口通信,每个客户端动态设置端口。
客户端启动后向服务端告知自己所使用的端口号,以便可以双向通信,同时服务器负责为每个客户端分配一个唯一的ID(服务器的ID为1)客户端和服务端以及客户端和客户端之间采用约定的数据格式进行通信,以便接收方可以正确的解析命令和数据。
数据包通用格式定义如下#define MAX_UDP_SIZE 1000struct udp_packet{int type;int senderId;long size;char content[MAX_UDP_SIZE];};type:表示该数据包的类型,直接决定content字段的含义senderId:该数据包的发送者的ID,size:整个数据包的数据长度content:数据包的内容,其数据格式由type决定。
服务器和客户端接受到数据包后,根据type字段的值来解析content字段的数据,从而作出正确的处理和响应。
所有的数据包类型以及对应的content字段的数据结构全部定义在define.h文件中[系统总体结构]由上图可以看出,服务器和客户端程序在总体结构上相似。
服务器和客户端的全部功在数据处理模块中实现,这也是整个程序的核心之处由于数据包的接受在单独的线程中完成,而界面采用Qt实现。
因此在接受线程中采用QCoreApplication::postEvent()方法向界面线程发送通知事件,在界面窗口中通过重载customEvent()方法响应该通知,然后从Server中获取数据并显示。
整个过程中涉及到线程同步和多线程安全问题,觉采用信号量和互斥量解决。
3.2服务端的实现3.2.1服务总体实现与概述服务端的全部功能在类Server中实现,由于在整个系统中有且只有一个服务端出现,应此该类采用单例模式实现,通过Server::Instance()方法获得Server的一个实例,通过调用Init()函数完成服务端的初始化(包括信号量的初始化、数据库的连接、设置要发送事件通知的界面对象Object*),最后通过Start()方法创建socket,绑定端口,创建数据包接受线程,至此,完成服务器的启动部分代码:class Server{friend class ServerPacketProcessor;public:virtual ~Server();static Server* Instance();bool Init(QObject *mainWindow);bool Start();void WaitForServerStop();protected:Server();void* ThreadStartRoutine(void* arg);private:static void* ThreadRoutineTransponder(void* arg);void postEvent(QEvent::Type eventType);static Server* m_server;sockaddr_in m_localaddr;int m_sockfd;pthread_t m_thread;bool bCancel;pthread_mutex_t m_mutex_clients;pthread_mutex_t m_mutex_msgs;QObject* m_ui;。
Server.cpp#include "server.h"Server* Server::m_server=0;bool Server::Init(QObject* mainWindow){m_ui=mainWindow;bCancel=false;pthread_mutex_init(&m_mutex_clients,0);pthread_mutex_init(&m_mutex_msgs,0);return true;}Server* Server::Instance(){if(m_server==0)m_server=new Server();return m_server;}bool Server::Start(){m_sockfd=socket(AF_INET,SOCK_DGRAM,0);if(m_sockfd==-1){cerr<<"create udp socket failed!"<<endl;return false;}m_localaddr.sin_port=htons(SRV_PORT);m_localaddr.sin_family=AF_INET;m_localaddr.sin_addr.s_addr=htonl(INADDR_ANY);if(-1==bind(m_sockfd,(struct sockaddr*)&m_localaddr,sizeof(m_localaddr))) {cerr<<"bind socket failed!"<<endl;return false;}if(!m_chatRecordMgr.ConnectDB("canghai","canghai","chat_record_schema")) {cerr<<"server connect datebase error!"<<endl;return false;}if(0!=pthread_create(&m_thread,0,ThreadRoutineTransponder,0)){cerr<<"create thread failed!"<<endl;return false;}return true;}void* Server::ThreadRoutineTransponder(void* arg){return Server::Instance()->ThreadStartRoutine(arg);}。
3.2.2服务器发送数据模块的显示由于所有的数据包均以udp_packet结构包装,应此发送模块较简单void Server::SendMsgTo(sockaddr_in clientaddr,const udp_packet* packet){sendto(m_sockfd,packet,packet->size,0,(struct sockaddr*)&clientaddr,sizeof(clientaddr));}3.2.3服务器接受线程的实现服务端的接受线程负责接受客户端发来的数据,并且解析数据包,采取合适的动作。
由于数据包的种类较多(随着功能的增加而增加),处理过程函数较为复杂,因此将数据包的处理过程封装在类ServerPacketProcessor的子类中,GetPacketProcessor()方法根据数据包的类型会创建合适的ServerPacketProcessor对象并返回线程函数和GetPacketProcessor方法的实现void* Server::ThreadStartRoutine(void* arg){while(!bCancel){udp_packet packet; //定义缓冲区memset(&packet,0,sizeof(packet));sockaddr_in clientaddr;socklen_t len=sizeof(clientaddr);size_t res=recvfrom(m_sockfd,&packet,sizeof(packet),0,(struct sockaddr*)&clientaddr,&len);if(res==-1){cerr<<"recvfrom error..."<<endl;}//根据数据包的类型获得正确的处理方式ServerPacketProcessor* processor=GetPacketProcessor(packet.type); if(processor==0)continue;//处理数据包processor->ProcessPacket(&packet,clientaddr);delete processor;}return 0;}ServerPacketProcessor* Server::GetPacketProcessor(int packet_type){switch(packet_type){case CLIENT_ONLINE_REQUST: //客户端上线请求{return new CltOnlinePacketProcessor(this);}case GROUP_MSG_SEND: //客户端发送群聊消息{return new GroupMsgPacketProcessor(this);}case QUERY_USER_INFO: //客户端查询其它用户信息{return new QueryUserInfoPacketProcessor(this);}case QUERY_CHAT_RECORD: //客户端查询聊天记录{return new QueryRecordPacketProcessor(this);}case CLIENT_OFF_LINE: //客户端下线{return new CltOfflinePacketProcessor(this);}default:return 0;}}3.2.4服务器数据包处理模块的设计当接受线程收到数据包后要根据数据包的类型作出正确的处理和响应对应的消息类型和content字段的数据结构1.客户端上线请求#define CLIENT_ONLINE_REQUST 1struct client_info{char username[20]; //客户端用户昵称char hostname[30]; //客户端的主机名short client_port; //客户端使用的通信端口};2.客户端发送群聊信息#define GROUP_MSG_SEND 4struct group_msg_send{char content[MAX_MSG_SIZE]; //消息内容};3.客户端查询其它用户信息#define QUERY_USER_INFO 6struct query_user{int userId; //可以查询指定的ID的用户,0则表示查询所有的用户信息};4.客户端查询聊天记录#define QUERY_CHAT_RECORD 10struct query_chat_record{int by_begin_time; //查询方式,1表示离开始时间点最近的count条记录,0表示离结束时间点最近的count条记录time_t begintime; //开始时间点time_t endtime; //结束时间点int count; //查询记录的条数};5.客户端下线#define CLIENT_OFF_LINE 12(content内容无含义)3.3客户端设计概要本系统在群聊的基础上实现私聊功能,从服务器的设计可看出,群聊消息是由服务器转发的。