A Java Chat Application——基于C/S架构的JAVA网络编程聊天小程序 保姆式教学

文章目录

  • 介绍及下载链接
  • 特征
  • 使用代码
  • 消息结构
  • jServer
  • jMessenger
  • 更新
  • 关于这个项目
  • 使用
    • 一.下载源码
    • 二.通过idea导入工程设置
    • 三.运行
    • 四.测试

介绍及下载链接

在本文中,我将演示一个可以同时处理多个用户的聊天应用程序。它还支持文件传输。

它完全基于Java,由两部分组成:jMessenger(客户端应用程序)和jServer(服务器应用程序)。

链接:https://pan.baidu.com/s/1ujGOp2j9osyoY3J8PzvLiQ
提取码:yyds

特征

同时处理多个用户
支持公共和私人消息
用户注册和登录可用
支持文件传输

使用代码

运行 jar 文件jMessenger.jar和jServer.jar并执行以下操作:

在 jServer 上选择“ data.xml ”作为数据库文件。该文件包含用户名和密码。
在 jMessenger 上选择“ History.xml ”作为历史文件。此文件用于保存聊天记录。
在许多情况下,如果 jMessenger 找不到服务器,则调整防火墙以使其能够访问网络。
这两个应用程序都是用 Netbeans 编写的,您可以在 Netbeans 中导入源文件以查看和编辑它们。

消息结构

jMessenger 中的每条消息都有四个字段:

type: 可以设置为message, login,newuser等。
sender: 发件人的用户名
content: 消息的实际内容
Recipient: 邮件收件人的用户名

jServer

jServer中有两个主要的类用于处理连接和消息。启动时SocketServer在单独的线程中运行。的工作SocketServer是等待连接并为每个连接启动一个新线程ServerThread。建立连接后,ServerThread将侦听任何消息并将其移交SocketServer给处理。它还会将来自其他用户的消息转发给连接的用户。

JAVA

// In ServerThread read the incoming message and hand it to SocketServer

Message msg = (Message) streamIn.readObject();
server.handle(ID, msg);
.......


// In SocketServer process the messages based on their type

public synchronized void handle(int ID, Message msg){  
	if(msg.type.equals("login")){
		....
	}
	else id(msg.type.equals("message")){
		if(msg.recipient.equals("All")){ Announce("message", msg.sender, msg.content); }
		else{
			// Find the thread of recipient and forward it to him
		}
	}
.......
…………

jMessenger

jMessenger 首先连接到由其 IP 地址和端口号指定的 jServer。然后,到达的消息及其发件人会显示在留言板上。

当一个用户想要发送一个文件时,首先他的请求是通过一个类型为 的消息发送的upload_req。然后收件人执行以下操作:

接收方在类型的消息中发送其回复upload_res
如果请求被接受,则接收者打开一个新端口
对于肯定回复,收件人的 IP 地址和端口号将被发回
发送者在收到肯定回复后连接到此套接字并开始文件上传
这种方法的一个优点是客户端可以同时聊天和传输文件。与消息不同,文件不通过 jServer。

JAVA

// On recipient side, start a new thread for download

Download dwn = new Download(....);
Thread t = new Thread(dwn);
t.start();
send(new Message("upload_res", ui.username, dwn.port, msg.sender));
// Reply to sender with IP address and port number
.........

// On sender side, start a new thread for file upload

// Connect to the port specified in reply
Upload upl = new Upload(addr, port, ui.file, ui);
Thread t = new Thread(upl);
t.start();

更新

关于该项目的两个问题存在很多混淆。我想在这里澄清一下。

1.聊天记录不完整。该项目的主要目的是展示网络概念,但由于截止日期限制,它没有完成。

2.很多人对为什么不能通过不同的网络聊天感到困惑。要理解这一点,请以任何 Web 服务器为例。任何浏览器要连接到 Web 服务器,该服务器需要有一个全局 IP 地址,以便在Internet 上可见。 同样,jServer 也是一个应用程序服务器,对于通过两个不同的网络(比如校园 LAN 和您家中的 DSL)进行聊天,它还需要在具有全球 IP 地址的计算机上运行。

关于这个项目

这是一个课堂项目,我想与他人分享。源代码根据代码项目开放许可证 (CPOL)获得许可。这个项目的目的是演示 Java 套接字,所以整个历史特性的实现并没有我希望的那么好。如果这篇文章证明有任何帮助,请告诉我。

使用

一.下载源码

目录结构如下:
A Java Chat Application——基于C/S架构的JAVA网络编程聊天小程序 保姆式教学_第1张图片

jServer两个类分别用来连接和消息:
在启动时SocketServer后,它会监听是否有客户端连接服务器,当发现客户端链接后创建一个线程到ServerThread。
ServerThread创建后就会持续的监听来自客户端的消息,并将消息交由SocketServer处理,Server将客户端用户名和密码保存在data.xml中。

jMessenger通过ip地址和端口号连接到jServer。到达的消息以及它们的发送者会显示在留言板上。在传输文件时,文件并不通过服务器,而是客户端之间启用单独线程直接传输,这样可以同时进行聊天和文件传输。jMessenger将消息记录保存在History.xml中,可以查看聊天历史记录。

二.通过idea导入工程设置

项目目录如下
A Java Chat Application——基于C/S架构的JAVA网络编程聊天小程序 保姆式教学_第2张图片

将两个模块导入项目中
A Java Chat Application——基于C/S架构的JAVA网络编程聊天小程序 保姆式教学_第3张图片
A Java Chat Application——基于C/S架构的JAVA网络编程聊天小程序 保姆式教学_第4张图片
A Java Chat Application——基于C/S架构的JAVA网络编程聊天小程序 保姆式教学_第5张图片

选择文件目录
A Java Chat Application——基于C/S架构的JAVA网络编程聊天小程序 保姆式教学_第6张图片

一直点NEXT后,文件目录出现代表导入成功
A Java Chat Application——基于C/S架构的JAVA网络编程聊天小程序 保姆式教学_第7张图片

指定项目JDK版本
A Java Chat Application——基于C/S架构的JAVA网络编程聊天小程序 保姆式教学_第8张图片

三.运行

A Java Chat Application——基于C/S架构的JAVA网络编程聊天小程序 保姆式教学_第9张图片

data.xml中保存有登录账号名密码

为实现多人聊天,指定客户端可以多实例启动
A Java Chat Application——基于C/S架构的JAVA网络编程聊天小程序 保姆式教学_第10张图片
A Java Chat Application——基于C/S架构的JAVA网络编程聊天小程序 保姆式教学_第11张图片

启动服务端
A Java Chat Application——基于C/S架构的JAVA网络编程聊天小程序 保姆式教学_第12张图片

选择data.xml的位置
A Java Chat Application——基于C/S架构的JAVA网络编程聊天小程序 保姆式教学_第13张图片

启动客户端
A Java Chat Application——基于C/S架构的JAVA网络编程聊天小程序 保姆式教学_第14张图片

四.测试

这里示例李雷向韩梅梅发消息
A Java Chat Application——基于C/S架构的JAVA网络编程聊天小程序 保姆式教学_第15张图片

可以看到李雷被拒绝的事情Anurag并不知情

当传送文件时,使用客户端与客户端链接,而不通过服务端
接收方需要同意
A Java Chat Application——基于C/S架构的JAVA网络编程聊天小程序 保姆式教学_第16张图片

Ref:
https://www.codeproject.com/Articles/524120/A-Java-Chat-Application

注:该程序不支持中文

你可能感兴趣的:(java)