`
haiyusimon
  • 浏览: 31323 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

chat 聊天系统

阅读更多

跟着马士兵老师开始做第一个项目。

分了很多步写,涉及的知识也比较多!

1.写了个窗口出来,客户端。这里主要是 gui 一章里的。component下container,container下又分window和panel,window下份Frame和Dialay.主要是Frame,布局管理器。当然还有各种按钮,和网页的差不多。还有一点非常重要,就是事件监听机制。

2起一个服务器端,主要的是java.net部分的和java.io的。关键字有ServerSocket,Socket,字节流,数据流DataInputStream, 反正就是输入输出,这边出,那边收,反之,亦然。还有就是writeUTF方法,read方法等等。这里就是要实现客户端发一个信息,服务器那边收到。

3.这步就是要把要把每客户端发过来的信息一一转发给各个客户端。这里就要用到多线程了,每一个线程负责把发过来的信息接收过来,并把该客户放进集合(ArrayList)集合里面的客户。然后把每一条发过来的信息一一转发给集合里面的每一个客户!

这里用到的是java.util里面的知识。定义的Client是一个内部类。

4.调试,完善。程序的大体框架建起来的,但离完善还很远。程序中抛出的exception还要细致处理。一步步调试,尽量让其能处理各种情况出现的异常。完善一些小的地方,更人性化一些。

附代码:

客户端

import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;

public class ChatClient extends Frame{
Socket cs = null;
private boolean bconnect = false;
DataOutputStream dos = null;
DataInputStream dis = null;
Thread ts = null;
TextArea n1 = new TextArea("会话窗口",20,50,3); //常量字段值,只创建垂直滚动条
TextField n2 = new TextField(50);
String name = null;
TextField id = new TextField(20);

public static void main(String[] args) {
new ChatClient().useid();
}

public void launchFrame(String s){

}

public void connection(){
try {
cs = new Socket("127.0.0.1",5231);
dos = new DataOutputStream(cs.getOutputStream());
bconnect = true;
n1.setText("已连接服务器!"+'\n'+'\n'+" ");
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

public void disconnection(){
try {
dis.close();
dos.close();
cs.close();
} catch (IOException e) {
e.printStackTrace();
}
}

public void recive(){
Server s = new Server();
ts = new Thread(s);
ts.start();
}

public void useid(){
Id i = new Id();
}

class Id extends Frame{

Id(){
setBounds(100,100,6,50);
setTitle("请输入名字");
add(id);
pack();
id.addActionListener(new IdMonitor());
setVisible(true);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
}

class IdMonitor implements ActionListener{
public void actionPerformed(ActionEvent e) {
name = id.getText().trim();
//System.out.println(name);
Frame f = new Frame();
f.setTitle(name+"正聊天中");
f.setBounds(10,10,200,300);
f.setLayout(new BorderLayout());
f.add(n1,BorderLayout.NORTH);
f.add(n2,BorderLayout.SOUTH);
n2.addActionListener(new Tn2Monitor());
f.pack();
f.setVisible(true);
connection();
recive();
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
disconnection();
System.exit(0);
}
});
}
}

class Server implements Runnable{

int count = 0;
String str7 = null;
String str8 = null;

Server(){
try {
dis = new DataInputStream(cs.getInputStream());
//System.out.println(dis);
} catch (IOException e) {
e.printStackTrace();
}
}

public void run(){
try {
while(bconnect){
String str = dis.readUTF();
if(count<9){
if(count == 7){
str7 = str;
n1.setText(n1.getText()+str+'\n'+'\n'+" ");
count++;
}else if(count == 8){
str8 = str;
n1.setText(n1.getText()+str+'\n'+'\n'+" ");
count++;
}else{
n1.setText(n1.getText()+str+'\n'+'\n'+" ");
count++;
}
}else{
count = 0;
n1.setText(" "+str7+'\n'+'\n'+" "+str8+'\n'+'\n'+" "+str+'\n'+'\n'+" ");
}

}
}catch(SocketException e){
System.out.println("客户端关闭");
}
catch (IOException e) {
e.printStackTrace();
}
}
}

private class Tn2Monitor implements ActionListener{

public void actionPerformed(ActionEvent e) {

String str = null;

str = n2.getText().trim();
n2.setText("");
str = (name+": "+str);
//System.out.println(str);
//n1.setText(str);
try {
dos.writeUTF(str);
dos.flush();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}

}

服务端

import java.awt.*;
import java.net.*;
import java.io.*;
import java.awt.event.*;
import java.util.*;

public class ChatServer {
boolean started = false;
ServerSocket ss = null;
ServerFrame sf = null;
ArrayList<Client> client = new ArrayList<Client>();

public static void main(String[] args) {
new ChatServer().start();
}

public void start(){
try {
ss = new ServerSocket(5231);
} catch (BindException e) {
System.out.println("端口已被使用!");
} catch (IOException e) {
e.printStackTrace();
}
sf = new ServerFrame("服务器");
try {
started = true;
while (started) {
Socket s = ss.accept();
System.out.println("a client connection!");
Client c = new Client(s); //起一个新的线程!
client.add(c);
Thread tc = new Thread(c);
tc.start();
}
}catch (IOException e) {
e.printStackTrace();
} finally {
try {
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

class Client implements Runnable {
Socket s = null;
DataInputStream dis = null;
private boolean cstarted = false;
DataOutputStream dos =null;

Client(Socket s) {
this.s = s;
try {
dis = new DataInputStream(s.getInputStream());
cstarted = true;
} catch (IOException e) {
e.printStackTrace();
}
}

public void send(String str){
try {
dos = new DataOutputStream(s.getOutputStream());
dos.writeUTF(str);
}catch(SocketException e){
//e.printStackTrace();
System.out.println("退出了!");
client.remove(this);
}
catch (IOException e) {
e.printStackTrace();
}
}

public void run() {
try {
while (cstarted) {
String str = dis.readUTF();
//System.out.println(dis.readUTF());
//sf.ts.setText(dis.readUTF());
// sf.ts.setText("");
for(int i = 0;i<client.size();i++){
Client c = client.get(i);
c.send(str);
}

/*for(Iterator<Client> it = client.iterator();it.hasNext();){
Client c = it.next();
c.send(str);
}
*/
}
} catch (EOFException e) {
System.out.println("客户端关闭!");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (dis != null)
dis.close();
if (dos != null)
dos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}

class ServerFrame extends Frame {

TextArea ts = null;

ServerFrame(String s) {
setTitle(s);
setBounds(100, 100, 320, 380);
ts = new TextArea(160, 160);
add(ts);
setVisible(true);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}

分享到:
评论

相关推荐

    jsp_chat 聊天系统

    【jsp_chat 聊天系统】是一个基于JSP(Java Server Pages)和Java技术构建的在线聊天应用程序。这个系统允许用户进行实时交流,提供了一个互动性强、用户体验良好的平台。通过使用JSP,开发者可以将静态HTML页面与...

    一个基于ASP.NET +Ajax实现的 Web 模式Chat 聊天系统源码例子

    【标题】中的“一个基于ASP.NET +Ajax实现的 Web 模式Chat 聊天系统源码例子”表明这是一个使用ASP.NET技术和Ajax技术构建的Web聊天应用实例。这个系统允许用户在网页上进行实时交流,无需刷新页面,提高了用户体验...

    基于Python语言的1001chat聊天系统设计源码

    该项目为基于Python语言的1001chat聊天系统设计源码,包含45个文件,包括40个Python源代码文件、1个Git忽略文件、1个文本文件、1个Python编译文件、1个Python对象文件、1个Excel文件。整个项目结构清晰,代码质量高...

    E@chat聊天系统

    聊天功能(不用说了吧^_^) 2。包厢功能(不用说了吧^_^) 3。私聊功能(不用说了吧^_^) 4。好友功能,可以把对象的话拉放您的包厢中,并且加了背景色注释 5。屏蔽功能,可以把对象的话过滤掉 6。设置状态功能...

    Chat聊天系统源码

    因为,今天我们是要用Asp.Net打造聊天室系统 首先,聊天室主要的用到的Asp.Net的两个内置对象 Session 和 Application 不管再asp或php或者jsp 里面都这些对象 首先我解释一下 Session Session也称为会话,它的作用域...

    基于vue3编写前端页面,node.js的koa框架作为后端,制作的chat聊天系统.zip

    Vue3,springboot,element-ui使用技巧,实战应用开发小系统参考资料,源码参考。 详细介绍了一些Qt框架的各种功能和模块,以及如何使用Qt进行GUI开发、网络编程和跨平台应用开发等。 适用于初学者和有经验的开发者...

    java做的chat聊天系统(附带数据库文件、项目展示PPT)

    并附带mysql数据库源文件,项目展示PPT,该项目仿的QQ聊天室,效果图在PPT里可以看见,无bug,已调试成功。学习程序设计的基本目的就是培养描述实际问题的程序化解决方案的关键技能。 我们做项目绝对不能人云亦云,...

    chat聊天室管理系统

    chat聊天室管理系统chat聊天室管理系统chat聊天室管理系统chat聊天室管理系统chat聊天室管理系统

    聊天系统Chat最原始版

    【标题】"聊天系统Chat最原始版" 描述了一个基于JAVA开发的早期聊天系统,它在2009年创建并被标记为高质量且无漏洞的代码。这个系统可能包含了基本的聊天功能,如用户注册、登录、实时消息传递以及可能的群组聊天...

    基于Java的聊天室chat

    在本项目中,我们基于Java技术构建了一个聊天室,它整合了MyEclipse开发环境和Sql server2005数据库系统,实现了丰富的功能,如用户注册、登录、管理好友关系以及进行私人聊天等。 首先,让我们深入探讨Java编程...

    java_caht聊天系统软件

    Java_Chat聊天系统软件是一款基于Java编程语言开发的实时通讯应用程序。它允许用户通过网络进行文本、语音甚至视频交流,是学习和理解Java网络编程、多线程以及并发处理的理想实例。下面将深入探讨该软件涉及到的...

    Chat聊天程序 java

    Chat聊天程序是网络通信的一种常见应用,而这个项目使用了Java语言进行开发,结合了Struts2和DWR(Direct Web Remoting)两种框架技术。接下来,我们将详细探讨这两个技术在构建聊天系统中的作用和重要性。 Struts2...

    PHP Live Chat Pro 在线客服在线即时聊天系统

    PHP_Live_Chat_Pro 是国外一款经典的在线即时聊天系统,官方售价30美金, 此版本为2017年5月更新的PHP_Live_Chat_Pro_v1.0, 内附中英文双版、使用文档、视频教程。 亲测安装绝对没问题,请大家放心下载、愉悦使用 ...

    最新版聊天机器人程序 ChatGPT对话系统源码 人工智能对话系统 爆红AI聊天机器人 Chat Nio系统源码.zip

    最新版ChatGPT对话系统源码 Chat Nio系统源码 支持 Vision 模型, 同时支持 直接上传图片 和 输入图片直链或 Base64 图片 功能 (如 GPT-4 Vision Preview, Gemini Pro Vision 等模型) 支持 DALL-E 模型绘图 支持 ...

    flashchat聊天室

    本文将深入探讨FlashChat聊天室的核心技术和实现方法,帮助读者理解其工作原理并提供一些开发建议。 首先,我们要了解PHP的作用。PHP(Hypertext Preprocessor)是一种广泛使用的开源脚本语言,尤其适用于Web开发,...

    Chat聊天室

    - "AlwaysUp"可能是指保持服务始终运行的需求,这可以通过设置系统服务或使用第三方工具来实现,确保Chat聊天室程序即使在无人值守时也能持续运行。 - "Bangquanzhang"可能是指程序的稳定性,强调在设计时要注重...

    网络聊天室chatserver.java

    这个服务端程序,通常称为服务器,是整个聊天系统的核心,它负责接收客户端的连接请求,处理通信,并将消息广播给其他在线用户。在Java编程中,实现这样的功能可能涉及Socket编程和多线程技术。 描述中的"只要运行...

    opencart 在线聊天插件livechat

    LiveChat的功能不仅限于基本的文字聊天。高级特性可能包括: - **离线消息**:当客服不在线时,访客可以留下信息,以便稍后回复。 - **访客行为追踪**:实时查看用户在网站上的活动,了解他们的购物意向。 - **多...

    语音聊天系统VoiceChat

    【VoiceChat】是一款基于C#开发的语音聊天系统,它为用户提供了一个简洁、直观的界面,使得用户能够方便地进行实时语音交流。该系统适用于多种场景,如远程协作、在线教育、社交娱乐等,它的核心功能包括语音传输、...

    PHP_Live_Chat_Pro(修改版).zip

    PHP_Live_Chat_Pro 是国外一款经典的在线即时聊天系统,全球十佳PHP在线客服排名第一的在线即时聊天系统 此源码内附中英文双版、及中文修改版。 亲测安装可用 中文修改版说明:可以直接对接别的系统,由别的...

Global site tag (gtag.js) - Google Analytics