Java实现简易聊天室
Java实现简易聊天室
在学习《Java从入门到精通》这本书,网络通信,基于TCP实现的简易聊天室,我这里对书中的代码略做了修改,做个记录。
这里先放一下运行效果图,代码放在最后。
运行效果:
先启动服务器端:

启动客户端:

发送数据:

主要的功能就是上面那些,在代码中我还添加一些功能,比如说给JTextField添加了焦点监听器,以及输入框为空的检查和提示,但总的来说还是比较简单,如果要实现健壮的聊天室程序还需要再做些修改。
下面放下代码,比较简单,就服务器端和客户端两个代码。
服务器端代码:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import static java.lang.System.out; public class MyTcp { private BufferedReader reader;
private ServerSocket server;
private Socket socket; void getServer(){
try {
server=new ServerSocket(8998); //实例化Socket对象
out.println("服务器套接字已创建成功"); while(true) {
out.println("等待客户机的连接");
socket=server.accept(); //accept()方法会返回一个和客户端Socket对象相连的Socket对象
reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
getClientMessage();
}
}catch(Exception e) {
e.printStackTrace();
}
} //读取客户端发送过来的信息
private void getClientMessage() {
try {
while(true) {
//获得客户端信息
out.println("客户机:"+reader.readLine());
}
}catch(Exception e) {
e.printStackTrace();
}
try {
if(reader!=null) {
reader.close();
}
if(socket!=null) {
socket.close();
}
}catch(Exception e) {
e.printStackTrace();
}
} public static void main(String[] args) {
MyTcp tcp=new MyTcp();
tcp.getServer();
} }
客户端代码:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.io.PrintWriter;
import java.net.Socket; import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder; public class MyClient extends JFrame{ private PrintWriter writer;
Socket socket;
private JTextArea ta=new JTextArea();
private JTextField tf=new JTextField();
Container cc; public MyClient(String title) {
super(title);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
cc=this.getContentPane(); final JScrollPane scrollPane=new JScrollPane();
scrollPane.setBorder(new BevelBorder(BevelBorder.RAISED));
getContentPane().add(scrollPane,BorderLayout.CENTER);
scrollPane.setViewportView(ta);
cc.add(tf,"South"); tf.addFocusListener(new JTextFieldListener(tf,"请在此输入内容"));
tf.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(tf.getText().isEmpty()) {
JOptionPane.showMessageDialog(MyClient.this, "请输入内容!");
}else {
writer.println(tf.getText()); ta.append(tf.getText()+"\n");
ta.setSelectionEnd(ta.getText().length());
tf.setText("");
} }
});
} //焦点监听器
class JTextFieldListener implements FocusListener{ private String hintText; //提示文字
private JTextField textField; public JTextFieldListener(JTextField textField,String hintText) {
this.textField=textField;
this.hintText=hintText;
textField.setText(hintText); //默认直接显示
textField.setForeground(Color.GRAY);
} @Override
public void focusGained(FocusEvent e) { //获取焦点时,清空提示内容
String temp=textField.getText();
if(temp.equals(hintText)){
textField.setText("");
textField.setForeground(Color.BLACK);
} } @Override
public void focusLost(FocusEvent e) { //失去焦点时,没有输入内容,显示提示内容
String temp=textField.getText();
if(temp.equals("")) {
textField.setForeground(Color.GRAY);
textField.setText(hintText);
} } } private void connect() {
ta.append("尝试连接\n");
try {
socket=new Socket("127.0.0.1",8998);
writer=new PrintWriter(socket.getOutputStream(),true); ta.append("完成连接\n"); }catch(Exception e) {
e.printStackTrace();
}
} public static void main(String[] args) { //EventQueue事件队列,封装了异步事件指派机制
EventQueue.invokeLater(new Runnable(){
public void run() {
MyClient client=new MyClient("向服务器发送数据");
client.setSize(400,400);
client.setVisible(true);
client.connect(); }
}); } }
启动的时候要注意先启动服务器端再启动客户端,不然会报错。
菜鸟还需要不断学习。
Java实现简易聊天室的更多相关文章
- 学习JavaSE TCP/IP协议与搭建简易聊天室
一.TCP/IP协议 1.TCP/IP协议包括TCP.IP和UDP等 2.域名通过dns服务器转换为IP地址 3.局域网可以通过IP或者主机地址寻找到相应的主机 4.TCP是可靠的连接,效率低,且连接 ...
- Socket实现简易聊天室,Client,Server
package seday08; import java.io.BufferedWriter;import java.io.OutputStream;import java.io.OutputStre ...
- php+websocket搭建简易聊天室实践
1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短 ...
- node.js+websocket实现简易聊天室
(文章是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) websocket提供了一种全双工客户端服务器的异步通信方法,这种通信方法使用ws或者wss协议,可 ...
- php_D3_“简易聊天室 ”实现的关键技术 详解
PHP+MySQL实现Internet上一个简易聊天室的关键技术 系统目标: 聊天室使用数据库汇集每个人的发言,并可将数据库内的发言信息显示在页面,让每个用户都可 ...
- Python开发【笔记】:aiohttp搭建简易聊天室
简易聊天室: 1.入口main.py import logging import jinja2 import aiohttp_jinja2 from aiohttp import web from a ...
- 示例:Socket应用之简易聊天室
在实际应用中,Server总是在指定的端口上监听是否有Client请求,一旦监听到Client请求,Server就会启动一个线程来响应该请求,而Server本身在启动完线程之后马上又进入监听状态. 示 ...
- node+websocket创建简易聊天室
关于websocket的介绍太多,在这就不一一介绍了,本文主要实现通过websocket创建一个简易聊天室,就是90年代那种聊天室 服务端 1.安装ws模块,uuid模块,ws是websocket模块 ...
- 基于Node.js + WebSocket 的简易聊天室
代码地址如下:http://www.demodashi.com/demo/13282.html Node.js聊天室运行说明 Node.js的本质就是运行在服务端的JavaScript.Node.js ...
随机推荐
- 【Matplotlib】使用速记
[持续更新] pyplot matplotlib.pyplot is a state-based interface to matplotlib. It provides a MATLAB-like ...
- idea输出文件夹没有jsp页面
目录 idea输出文件夹没有jsp页面 问题描述 解决办法 idea输出文件夹没有jsp页面 问题描述 开始创建没有使用web的模板, 自己创建tomcat等配置, 后来启动发现没有index.jsp ...
- js 校验手机号码格式
手机号码格式简单校验 原理:判断手机号是否以已经发行的手机号码段开头,而且判断其余9位是否是数字. 方式一: var phone = $('#phone').val(); var regex = ...
- Android 10 终于来了!增加了不少新特性
前言 Android 10 正式发布了,根据官网的介绍,聚焦于隐私可控.手机自定义与使用效率,此版本主要带来了十大新特性: image 智能回复 使用机器学习来预测你在回复信息时可能会说些什么,这 ...
- Java一个对象占用多少字节
虚拟机:Java HotSpot(TM) 64-Bit Server VM (25.221-b11, mixed mode) 对象的内存以字节为单位,且必须是8的倍数,它的构成由3部分组成:对象头+实 ...
- 【发现】visualvm是jdk自带的一款监控工具
visualvm是jdk自带的一款监控工具.它提供了一个可视界面,用于查看 Java 虚拟机上运行的基于 Java 技术的程序的详细信息.VisualVM 对 Java Development Kit ...
- 微信小程序之判断页面来源
1. 对非首页,使用 getCurrentPages 函数获取当前页面栈 onLoad: function (options) { let pages = getCurrentPages() if ( ...
- Maven 教程(20)— 使用maven-assembly-plugin插件来定制化打包
原文地址:https://blog.csdn.net/liupeifeng3514/article/details/79777976 简单的说,maven-assembly-plugin 就是用来帮助 ...
- Linux常用基础(二)
1.压缩包管理 (1)gz和bz2格式 1)gzip -- gz格式的压缩包 压缩:gzip +压缩的文件 解压缩:gunzip + 需要解压的文件 2)bzip2 -- bz2格式的压缩包 压缩:b ...
- CentOS下安装php 5.6.19
# php安装包下载wget https://www.php.net/distributions/php-5.6.19.tar.bz2# 解压bunzip2 php-5.6.19.tar.bz2tar ...