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

介绍及下载链接

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

它完全基于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 套接字,所以整个历史特性的实现并没有我希望的那么好。如果这篇文章证明有任何帮助,请告诉我。

使用

一.下载源码

目录结构如下:
请添加图片描述

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

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

二.通过idea导入工程设置

项目目录如下
请添加图片描述

将两个模块导入项目中
请添加图片描述
请添加图片描述
请添加图片描述

选择文件目录
请添加图片描述

一直点NEXT后,文件目录出现代表导入成功
请添加图片描述

指定项目JDK版本
请添加图片描述

三.运行

请添加图片描述

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

为实现多人聊天,指定客户端可以多实例启动
请添加图片描述
请添加图片描述

启动服务端
请添加图片描述

选择data.xml的位置
请添加图片描述

启动客户端
请添加图片描述

四.测试

这里示例李雷向韩梅梅发消息
请添加图片描述

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

当传送文件时,使用客户端与客户端链接,而不通过服务端
接收方需要同意
请添加图片描述

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

注:该程序不支持中文

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值