基于socket的聊天程序

2024-05-23

基于socket的聊天程序(精选4篇)

基于socket的聊天程序 篇1

实现思路

服务器端

1.用一个Map保存“在线的用户”,键——用户的名称

值——当前用户对应socket对象

2.为每一个接通的客户端(socket对象)开通一条线程,这条线程绑定的任务是: 读取客户端发送的消息 然后再发送每个用户

(我们可以认为这个Map就是一个聊天室,map中的一个成员就是一个用户);获得当前客户端发送过来的信息, 当前“聊天室”内的所有“用户”都接收到信息。

当某用用户断开连接表明此用户离开了, 为这个用户开通的这条线程结束,同时需要释放资源,所以在finnaly块中要 关闭流对象, 将此用户移除Map,同时广播某某人离开了如:客户端

客户端第一次登录必须先输入用户名并发送给服务器注册

System.out.println(“请输入用户名:”);

userName = get.readLine();

pw.println(“1-”+userName);

然后发送消息:

公聊pw.println(“2-”+username+“-”+消息内容);私聊pw.println(“3-”+username+“-”+收消息人名字+“-”+消息内容);

那么服务端 读取客户端的消息后分隔字符串msg =bufRead.readLine()String[] arrMsg=msg.split(“-”);arrMsg[0]是标识arrMsg[1]就是用户名 判断标识:

* 服务器收到消息 1开头表示新加入的聊天用户

2开头表示公聊消息;

3开头表示私聊消息

标识是1, 新用户登录,获得当前客户端的用户名,加入到Map中并给每个用户广播某某登录了客户端发送格式:1-用户名标识是2是公聊的消息,则将此消息转发给所有用户 客户端发送消息的格式是:2-用户名=消息内容标识是3是私聊的消息,则将此消息转发给指定用用户 客户端发送消息的格式是:2-发送者-接收者-消息内容分隔字符串后arrMsg[1]消息发送者,arrMsg[2]收消息者 arrMsg[3]消息内容

客户器端

1.首先输入用户名向服务器注册

2.定义菜单选择是公聊或私聊

3.启用一个线程负责读服务器广播的消息

4.循环向服务器发送消息 根据收消息者的名称 到Map中找到对应的Socket ,向收消息者发送消息msg=arrMsg[1] +“对你说:”+ arrMsg[3] 根据发送者的名称 到Map中找到对应的Socket ,向发送者发送消息msg=“你对” + arrMsg[2] +“说:”+ arrMsg[3]

基于socket的聊天程序 篇2

1 开发环境和技术准备

1.1 开发及运行环境

(1) 操作系统:Windows 2000、Windows XP、Windows2003或Linux等。

(2) 开发工具:MyEclipse, JDK6.0。

(3) CPU:Pentium4 1.8GHz。

(4) 内存:128MB以上。

1.2 技术准备

1.2.1 Socket

Socket是面向客户/服务器模型而设计的, Socket接口是TCP/IP网络的API, Socket接口定义了许多函数或例程, Java程序员可以用它们来开发TCP/IP网络上的应用程序。在Java中, Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端, Socket是建立网络连接时使用的。在连接成功时, 应用程序两端都会产生一个Socket实例, 只需操作这个实例, 就可完成所需的会话。

1.2.2 多线程

多线程是这样一种机制, 它允许在程序中并发执行多个指令流, 每个指令流都称为一个线程, 彼此间互相独立。线程又称为轻量级进程, 它和进程一样拥有独立的执行控制, 由操作系统负责调度, 区别在于线程没有独立的存储空间, 而是和所属进程中的其他线程共享一个存储空间, 这使得线程间的通信远较进程简单。多个线程的执行是并发的, 也就是在逻辑上“同时”, 而不管是否是物理上的“同时”。

葛福鸿张丽萍

1.2.3 MVC设计模式

MVC (Model-View-Controller, 即模型层-视图层-控制层是一种设计模式, 它强制地将应用程序的输入、处理以及输出分开。MVC模型3个核心部分:模型层、视图层和控制层, 分别负担不同的任务。视图层位于用户客户端。模型层和控制层位于服务器端。

2 功能设计

2.1 客户端功能

(1) 登录上线。

(2) 显示其他在线用户。

(3) 更新自己的在线用户列表。

(4) 与其他上线用户发起会话 (一对一私聊) 。

(5) 与多名上线用户群聊。

(6) 发送和接收文件。

2.2 服务器端功能

(1) 记录上线用户的信息, 将其发送给其他在线用户。

(2) 接收用户下线信息, 将其发送给其他在线用户。

(3) 接收用户群聊信息, 将其发送给所有在线用户。

(4) 接收用户私聊信息, 将其发送给相应的在线用户。

(5) 接收用户文件信息, 将其发送给相应的在线用户。

2.3 功能结构

系统功能结构如图1所示。

3 总体框架

3.1 文件架构

(1) Client.java文件:客户端主程序源文件。

(2) Clientframe.java文件:客户端用户界面实现源文件。

(3) ClientUtil.java文件:处理字符串和显示信息工具类源文件。

(4) Server.java文件:服务器端源文件。

(5) Message.java文件:定义了聊天信息和文件信息。

(6) Usermessage.java文件:定义了用户信息。

(7) Image文件夹:存放程序中使用按钮图片和表情图片, 打jar包时一并打入。

3.2 系统架构

3.2.1 系统类

(1) Client类:实现客户端的功能。

(2) Clientframe类:设计客户端的用户界面。

(3) ClientUtil类:用于处理字符串和显示信息和表情图片的工具类。

(4) Server类:服务器端主类, 用于实现服务器端功能。

(5) Message类:实现了聊天信息的属性和方法。

(6) Usermessage类:实现了用户信息的属性和方法。

3.2.2系统类关系视图

系统类关系视图如图2所示。

3.2.3 系统实现关键

(1) 控制好Socket个数和分配是决定程序能否完成的关键。

(2) 实现群聊是整个程序关键, 利用群聊可以实现单聊和文件传送。

(3) 理清服务器端和客户端交互过程和传递的数据。

如何理解整个客户端和服务器端通信的这个模型, 主要是对ServerSocket中的accept方法接收到的Socket的理解。通信过程是:首先服务器端启动, 建立监听端口, 等待连接。其次是客户端 (C1、C2和C3) 与服务器发起连接, 由ServerSocket中的accept方法建立一个Socket (S1、S2和S3) , 客户端和服务器双方就分别通过各自相对应的Socket进行通信, 而ServerSocket建立的监听端口则继续进行监听, 它本身并不参与具体的通信过程。

4 主要功能模块设计和实现

4.1 用户列表模块

4.1.1 用户列表界面

当用户输入用户名后就会进入到用户列表窗口, 界面设计如图3所示。

4.1.2用户列表功能实现

用户列表窗口要完成的功能是:显示所有在线用户信息、监听群聊事件和监听私聊事件, 并触发聊天窗口的显示。

显示所有在线用户信息的代码如下:

4.2 用户通信模块

4.2.1 聊天界面

当用户点击群聊按钮或双击用户列表中某个在线用户后就会弹出到聊天窗口, 界面设计如图4所示。

4.2.2 聊天功能实现

私聊和群聊使用同一处理模块, 该模块处理已接收信息, 将表情与字符分开, 主要代码如下:

将处理过的信息显示在面板上:

4.3 服务器转发模块

服务器端不需要出现图形用户界面, 服务器端所要做的工作就是接收各个客户端传来的信息, 识别信息的类型 (包括用户信息、上线信息、私聊信息、群聊信息和文件信息) , 再将信息转发给相应的客户。

将监听方法做成一个线程, 此线程只负责监听, 用于产生一个新的Socket, 并将其存储起来, 关键代码如下:

转发聊天信息:

整个系统全部用Java技术来实现, 能够实现平台无关性、可移植性等。Java技术在网络编程方面具有很多优点, 但由于其自身的机制, 仍有许多有待改善的地方, 比如运行速度慢等。只有对Java进行改进, 才能是其得到更广泛的应用。

参考文献

[1]陈更力, 张青.基于Java Socket网络编程的一种新实现[J].电脑开发与用, 2006 (6) :13.

[2]袁海燕, 王文涛.Java实用程序设计100例[M].北京:人民邮电出社, 2005:226-229.13.

[3]陈小平.Java在Client/Server网络中的应用.安徽工业大学学报[N], 2002.

[4]Merlin Hughes, 等, 著, 刘先勇, 等, 译.Java网络编程技术内幕[M].国防工业出版社, 2002.

基于socket的聊天程序 篇3

关键词:socket;局域网;聊天工具

中图分类号:TP393.1文献标识码:A文章编号:1007-9599 (2012) 02-0000-02

Socket-based Local Area Network Chat Tool

Wang Yajie,Wang Lingfen

(Dalian Nationalities University,Dalian116600,China)

Abstract:This paper is a brief introduction to software design and development status of the socket LAN chat tool based on the basis of the software development platform to design LAN socket based chat tool client.This design process many instructions in the text:on the one hand focuses on the software with the features and functionality described on this basis to supplement its use;the other hand,focused on introducing the chat tool related technologies used in the process of software design and implementation;finally summarizes the change chat tools software design ideas and methods.

Keywords:Socket;LAN;Chat tool

一、基于socket的局域网聊天工具软件设计的发展现状分析

通信网络是我们现代社会发展的“信息基础设施”,这一定义不难看出通信技术的重要性,且随着信息全球化的不断发展,通信网络技术也随着得到长足的发展。但需要注意的是,在现代社会,人们的生活和工作节奏都相对较快,这种现状下,出于高效、高质的目的,通信网络越来越多的应用是发生在局域网内部的。局域网的使用给人们带来了极大的便利,工作流程得到极大的简化、工作效率得到了极大的提高、更重要的是在这样的良好状况下还极大的保证了工作的准确性和有效性。通信网络的进一步发展就得到了更多先进的应用技术,如数据库的开发、网络会议的实现等,但随之而来的也就是对局域网信息处理能力要求的不断提高。如果不能很好的处理局域网通信网络的信息处理能力的局限这一问题的话,就很难将局域网通信网络技术的优势发挥到最大,个别特殊的时候甚至还会给工作带来不便之处。

本文正是在这样一种大的背景和前提下来讨论一种基于socket的局域网通信方法,这种聊天工具软件可以为局域网的用户提供一种符合要求且有着较高安全性能的通信机制,且其可以在多种不同的操作系统上运行实现,也就是说,这一聊天工具软件的安装不需要对局域网用户原有的硬件设施进行任何复杂的改动,具有物美价廉的优势,且综合这种基于socket局域网聊天工具自身固有的技术优势,可以判定其应用前景是极为广泛的。

二、聊天工具软件总体设计

对基于socket局域网聊天工具这一具体的局域网通信软件进行总体设计时,要全面考虑到其特殊性和优势所在并充分利用之,下面就其实际的功能要求、运行环境要求以及关键技术进行较为详尽的阐述:

(一)聊天工具的功能要求

本文所设计的这款聊天工具,因其面临的实际要求就是性能稳定、方便使用且能够进行实时通讯,因此它相应的就应该有如下所述的特征:性能稳定,能保证信息传递的安全性与完整性;适应性强,可以广泛应用于各种常见的不同的硬件设施和操作系统环境;具有适当的容错能力;高度的可定制性,这样就可以满足不同客户的不同要求。

这款软件在最终设计完成投入使用时,应其自身属性的要求也应具有一些特定的功能。一方面是对所设计系统的总体要求,另一方面是针对于客户端和服务器分别有相对应的要求。总体上来说,要能实现客户端和服务器的相对独立,即其不需要限制在同一台计算机内,这就极大的提高了这一软件应用时的灵活度。对客户端来说,则要求该聊天工具能够使用户自主的选择和更改个人的昵称和签名,能够自主的选择特定的其他用户进行聊天,还要能够保证提供实时准确的时间;对于服务器则要求其能够进行面向全体用户的系统广播和消息播送,还要能够记录全体用户的实时状态。

(二)聊天工具的运行环境

我们所设计的面向内部局域网的即时通信软件,因此在软件和硬件的选择上都要适合于这一限制条件的特点,通常来说要求有以下的几个方面:性能稳定,能够应用于多种不同的操作系统,运行平台尽可能的多,运行配置尽可能的低,因此我们最终选择如下文所述配置。

1.软件设施

操作系统和编程语言的选取与最终得到的软件程序质量息息相关,根据我们对于应用环境的要求,故选择Windows XP操作系统作为开发平台,并选择具有性能良好的开发工具Delphi7.0。

2.硬件设施

局域网网络,20G以上的硬盘空间,128MB以上的内存,Intel Pentium PIII以上处理器,两台以上计算机。

(三)聊天工具的关键技术

本文中所设计的聊天工具其关键技术也是表现在多个方面的,但本文则着重于介绍其中的一种,即客户/服务器体系机构的设计。顾名思义,其结构具体包括客户机和服务器两部分的结构。客户机负责产生和访问数据,服务器则负责处理和储存数据。我们之所以选择C/S结构主要是考虑到两个方面的因素,一方面是客观现实的要求,我们可以看到的是C/S结构是一个典型的非对等结构,也就是说,客户端和服务器处在一个完全不平等的位置,服务器具有许多客户端所不具有的资源和处理能力,而这正是符合网络存在的真实目的的;另一方面则是技术层面的问题,考虑到网络上不同主机之间的数据生成和处理都是不同步的,但通信现象又具有随机性,所以必须为之设计一种提供同步数据交换的机制,而C/S结构正是很好的做到了这一点。总的来说,C/S结构具有以下的优势和特点:集中关注客户数据交换量,保持数据交换的透明性,提高了聊天工具整体的安全性。

三、聊天工具客户端设计细则

在这里对聊天工具客户端的设计的原理和思路进行简要的介绍。

(一)聊天工具客户端设计原理

我们都知道,计算机网络实际上就是由一系列的通信协议共同组成的,其核心的就是TCP/IP协议,这一协议就如同我们的电话线,它是通过双方保持通路来实现的。因此在该网络协议的应用中,相互作用的主要模式就是上文所述的客户机/服务器模式,且在实际的操作过程中使用的主动请求模式,简单的说,就是客户端首先向服务器发出请求,服务器在收到客户端的请求后再根据设计进行相应的处理。

(二)聊天工具客户端设计思路

在对这种较大型的通信软件进行设计时,一定是要首先对其所要实现的功能和实现方式进行分析的,在完成这一工作的基础上在建立起一个大致的设计思路框架,再进一步的化大为小,将各个部分分别作为较小的设计目的来实现,再将起整合与调试,最终实现设计目的。本文所设计的软件设计目的上文中已明确的说明,故此处不赘述。在这里还需要特殊注意的一点就是要准确和严谨的把握程序中信息传输格式的控制,提出这一点是因为信息在传输的过程中,如果我们不加以区分的话,那么普通的聊天信息和系统信息操作系统自身是无法辨别的,解决这一问题的方法很简单,只需要将不同信息的作不同格式处理即可,以方便计算机的辨认和处理。

四、结语

事实上,在这软件的设计中,各子程序的链接不需要再进行套接工作,这是因为我们所选取的Delphi自身带有大量进行连接的不见,可以自行完成。但尽管如此,由于时间有限和笔者自身的水平有限,该设计中可能还是存在着一些不足的地方,望同行不辞指正。我们有理由相信,在我们共同的努力下,依靠着科技的不断进步和社会的不断发展,通信网络技术还会一次又一次的出现新的发展平台和局面,基于socket的局域网聊天工具应用前景广泛,不断能够实现传统要求,还能针对新的要求提出对策,我们就不难相信其将有着更大的应用前景。

参考文献:

[1]高恩勇.利用Delphi编写Socket通信程序[J].沧州师范专科学校学报,2010,4:52-54

[2]王茂林,贺富强.socket在局域网通信中的应用[J].舰船电子工程,2006,5

[3]蔡燕敏.局域网聊天工具的设计与实现[J].现代计算机,2011,8

[作者简介]王雅洁,大四学生,单位:大连民族学院;王玲芬,副教授,单位:大连民族学院。

基于Java多线程的聊天室程序 篇4

网上各个网站提供的聊天室基本都是B/S结构的, 现在用Java实现一个C/S结构的聊天室程序。C/S结构包括两个方面:一个运行在服务器;一个运行在客户端。

2 工作原理

服务器程序运行后就等待客户端程序连入, 客户端根据服务器的IP地址和端口号连入, 这样服务器和客户端就建立了一个连接, 而且可以有多个客户端同时连入一个服务器。连接建立好之后, 每个客户端的发言都发送给服务器, 服务器接收后再转发给所有连入的客户端, 这样每个客户端就都能收到其他客户发出的信息了。这就是C/S结构聊天室的工作原理, 其实现主要使用如下两种技术:

(1) Socket:网络套接字, 让两个应用程序通过一个双向的网络通信链接实现数据交换。即服务器和客户端的应用程序各有一个Socket, 这两个Socket把服务器和客户端的程序连接起来并交换数据。

(2) 多线程:因为一个服务器要连入多个客户端, 要让服务器程序同时为多个客户服务, 就需要为每个客户端开辟一个线程, 专门负责处理该客户的信息。此外, 客户端程序不仅要发送信息给服务器, 还要不断接收服务器转发过来的信息, 因此也需要开辟一个线程专门负责接收服务器的信息。

3 程序实现

3.1 服务器端

建一个类, 名称为ChartServer, 代表服务器程序。在该类中, 首先定义一个ServerSocket, 并指明端口号, 这样服务器端的Socket就建立好了。然后去接收客户端的请求, 并且把客户端传来的Socket放入一个HashSet中保存 (HashSet集合中保存所有客户的Socket, 以便服务器) , 最后启动一个线程负责该客户, 在线程中不断接收该客户发送的信息并转发给HashSet中所有的客户。代码如下:

3.2 客户端

建一个ChartClient类作为客户端程序。运行后如图1所示。首先构建好界面, 然后定义Socket, 指明服务器的IP地址和端口号, 这样就建立起了客户端到服务器的连接。连接建立之后服务器和客户端就可以互相发送数据信息了。接下来启动一个线程专门负责接收服务器发送来的信息并显示到聊天室里。最后, 还要写一个事件, 负责把客户的发言发送给服务器, 让发送按钮注册该事件, 这样单击按钮就可以发送信息了。在这个过程里, 信息的发送和接收都是通过I/O实现的。代码如下:

4 结语

上一篇:妈妈,我爱你作文字下一篇:大梦想家tfboys歌词