Java实现 简单聊天软件
简单的聊天软件
//客户端 package yjd9;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*; public class MyClient extends JFrame implements ActionListener, Runnable { Socket clientSocket;
JTextArea jTextReceive = new JTextArea();
JTextField jTextSend = new JTextField();
JButton jbc = new JButton("发送");
JScrollPane jsp = new JScrollPane(jTextReceive);
boolean flag = true; //标记是否结束
Thread connenThread; //用于向服务器端发送信息
DataInputStream cin1;
DataOutputStream cout;
static boolean flagclient = false; public static void main(String[] args) {
new MyClient().clientStart();
} public synchronized void changeFlag(boolean t) {
flagclient = t;
} public void clientStart() {
try { //连接服务器端,这里使用本机
this.setTitle("客户端,端口号:8080");
this.setLayout(null);
this.setBounds(20, 00, 300, 300);
jsp.setBounds(20, 20, 220, 100);
jTextSend.setBounds(20, 120, 220, 50);
jbc.setBounds(20, 170, 220, 30);
this.add(jsp);
this.add(jTextSend);
this.add(jbc);
this.setVisible(true);
jbc.addActionListener(this);
clientSocket = new Socket("localhost", 8080);
jTextReceive.setText("连接已经建立完毕!\n");
while (flag) {
try (InputStream is = clientSocket.getInputStream()) {
cin1 = new DataInputStream(clientSocket.getInputStream());
try (OutputStream os = clientSocket.getOutputStream()) {
cout = new DataOutputStream(os);
connenThread = new Thread(this);
connenThread.start(); //启动线程,向服务器端发送信息
String aLine;
while (true) {
aLine = cin1.readUTF();
jTextReceive.append("服务器发来信息:" + aLine + "\n");
if (aLine.equals("bye")) {
flag = false;
connenThread.interrupt();
break;
}
}
cout.close();
}
cin1.close();
}
clientSocket.close(); //关闭Socket连接
System.exit(0);
}
} catch (Exception e) {
System.out.println(e);
}
} @Override
public void run() { while (true) {
try {
Thread.sleep(10);
} catch (InterruptedException ex) {
Logger.getLogger(MyClient.class.getName()).log(Level.SEVERE, null, ex);
}
try {
if (flagclient == true) { String str = jTextSend.getText().trim();
if(str==null||str.length()<=0){}
else{
jTextReceive.append("发送消息:" + str + "\n");
cout.writeUTF(str);
cout.flush();}
jTextSend.setText(null);
changeFlag(false);
} } catch (Exception e) {
System.out.println(e);
}
}
} @Override
public void actionPerformed(ActionEvent e) {
JButton jbt = (JButton) e.getSource();
if (jbt == jbc) //若单击确认对话框中的“发送”按钮
{
changeFlag(true);
}
}
} //服务器端 package yjd9; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*; public class Myserver extends JFrame implements ActionListener, Runnable {
JTextArea jTextReceive = new JTextArea();
JTextField jTextSend = new JTextField();
JButton jbs = new JButton("发送");
ServerSocket server = null;
JScrollPane jsp = new JScrollPane(jTextReceive);
Socket clientSocket; //负责当前线程中C/S通信中的Socket对象
boolean flag = true; //标记是否结束
Thread connenThread; //向客户端发送信息的线程
BufferedReader sin; //输入流对象
DataInputStream sin1;
DataOutputStream sout; //输出流对象
boolean flags = false; public static void main(String[] args) {
Myserver MS = new Myserver();
MS.serverStart();
}
public synchronized void changeFlag(boolean t){
flags=t;
} public void serverStart() {
try {
server = new ServerSocket(8080); //建立监听服务
this.setTitle("服务器端,端口号:" + server.getLocalPort());
this.setLayout(null);
this.setBounds(20, 00, 300, 300);
jsp.setBounds(20, 20, 220, 100);
jTextSend.setBounds(20, 120, 220, 50);
jbs.setBounds(20, 170, 220, 30);
this.add(jsp);
this.add(jTextSend);
this.add(jbs);
this.setVisible(true);
jbs.addActionListener(this);
while (flag) {
clientSocket = server.accept();
jTextReceive.setText("连接已经建立完毕!\n");
try (InputStream is = clientSocket.getInputStream()) {
sin = new BufferedReader(new InputStreamReader(is));
try (OutputStream os = clientSocket.getOutputStream()) {
sin1 = new DataInputStream(clientSocket.getInputStream());
sout = new DataOutputStream(os);
connenThread = new Thread(this);
connenThread.start(); //启动线程,向客户端发送信息
String aLine;
while(true){
aLine=sin1.readUTF();
jTextReceive.append("客户端发来信息:" +aLine+"\n");
if (aLine.equals("bye")) {
flag = false;
connenThread.interrupt();
break;
}
}
sout.close();
}
sin.close();
}
clientSocket.close(); //关闭Socket连接
System.exit(0); //程序运行结束
}
} catch (Exception e) {
System.out.println(e);
}
} @Override
public void run() {
while (true) {
try {
Thread.sleep(10);
} catch (InterruptedException ex) {
Logger.getLogger(Myserver.class.getName()).log(Level.SEVERE, null, ex);
}
try {
if (flags == true) {
changeFlag(false);
String str = jTextSend.getText().trim();
if(str==null||str.length()<=0){}
else{
sout.writeUTF(str);
sout.flush();
jTextReceive.append("服务器发送消息:"+str+"\n"); }
jTextSend.setText("");
} } catch (Exception e) {
System.out.println(e);
}
}
} @Override
public void finalize() //析构方法
{
try {
server.close();
} //停止ServerSocket服务
catch (IOException e) {
System.out.println(e);
}
} @Override
public void actionPerformed(ActionEvent e) {
JButton jbt = (JButton) e.getSource();
if (jbt == jbs) //若单击确认对话框中的“发送”按钮
{
changeFlag(true);
}
}
}

Java实现 简单聊天软件的更多相关文章
- WPF使用socket实现简单聊天软件
公司网络限制不能传文件,先贴部分代码 控件添加到界面就行,界面随意布局 项目结构: 1.解决方案 1.1. Client 1.2. Server Client: <Window x:Class= ...
- python练习四—简单的聊天软件
python最强大的是什么?库支持!!有了强大的库支持,一个简单的聊天软件实现就更简单了,本项目思路如下 # 项目思路 1. 服务器的工作 * 初始化服务器 * 新建一个聊天房间 * 维护一个已链接用 ...
- Java语言实现简单FTP软件------>FTP软件主界面的实现(四)
首先看一下该软件的整体代码框架 1.首先介绍程序的主入口FTPMain.java,采用了一个漂亮的外观风格 package com.oyp.ftp; im ...
- Java语言实现简单FTP软件------>源码放送(十三)
Java语言实现简单FTP软件------>FTP协议分析(一) Java语言实现简单FTP软件------>FTP软件效果图预览之下载功能(二) Java语言实现简单FTP软件----- ...
- Java语言实现简单FTP软件------>上传下载管理模块的实现(十一)
1.上传本地文件或文件夹到远程FTP服务器端的功能. 当用户在本地文件列表中选择想要上传的文件后,点击上传按钮,将本机上指定的文件上传到FTP服务器当前展现的目录,下图为上传子模块流程图 选择好要上传 ...
- Java continue break 制作简单聊天室程序,屏蔽不文明语言,显示每句话聊天时间 for(;;) SimpleDateFormat("yyyy-MM-dd hh:mm:ss") equalsIgnoreCase
package com.swift; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanne ...
- java web利用mvc结构实现简单聊天室功能
简单聊天室采用各种内部对象不适用数据库实现. 一个聊天室要实现的基本功能是: 1.用户登录进入聊天室, 2.用户发言 3.用户可以看见别人发言 刚才算是简单的需求分析了,现在就应该是进 ...
- 局域网聊天软件(winsocket)
LANChat工作整理 2013/8/22 程序实现功能: 局域网聊天软件,启动即可找到在线设备,并能够进行简单的文字聊天. 其实下面这个框图已经说明了程序的绝大部分功能原理. 核心类的程序框图 我觉 ...
- 高仿QQ即时聊天软件开发系列之三登录窗口用户选择下拉框
上一篇高仿QQ即时聊天软件开发系列之二登录窗口界面写了一个大概的布局和原理 这一篇详细说下拉框的实现原理 先上最终效果图 一开始其实只是想给下拉框加一个placeholder效果,让下拉框在未选择未输 ...
随机推荐
- Servlet乱码问题
数据像水流一样从一个地方流向另一个地方. 文本流是特殊的二进制流. 既然提到乱码问题,那就必然是用错误的编码去解释二进制流. 在传输过程中必然都是以二进制流传输的. 所以,我们需要考虑的是: 有几个数 ...
- 【LeetCode】154. Find Minimum in Rotated Sorted Array II (3 solutions)
Find Minimum in Rotated Sorted Array II Follow up for "Find Minimum in Rotated Sorted Array&quo ...
- 32个Chrome 针对网页设计师和开发人员扩展
http://zmingcx.com/32-chrome-web-designers-and-developers-to-expand.html
- 2.Java基础:方法定义和调用
一.方法的定义 1.类的方法代表的是实力的某种行为(或功能) 方法的定义:方法类型 . 方法签名 . 方法体 2.定义类的方法 访问修饰符 类型 方法名(参数列表){ ///方法体 } 3.把方法当作 ...
- 转 python selenium 常见问题列表
怎么用ChromeDriver ? 从这里下载最新的driver版本并解压 # 好吧,这个命令是给linux or osx用户准备的 # windows用户直接手点吧 by 乙醇 unzip ch ...
- 北风网VIP6级学习视频地址
账号密码是我的QQ http://www.爱北风.com/vip6.php
- Hadoop2.x介绍与源代码编译
1.Hadoop 项目的四大模块 Hadoop Common: The common utilities that support the other Hadoop modules. Hadoop D ...
- [100]linux输入输出重定向
一目了然版本: &号含义: 参考 参考:非常经典,值得一看,我是在linux爱好者公众号里发现的. 下面是我自己的一些总结. linux的命令数据流 在Linux下,当一个用户进程被创建的时候 ...
- C# winform 多线程异步操作线程启动暂停与恢复
/// <summary> /// 线程控制模块 /// </summary> private ManualResetEvent manualResetEvent = new ...
- markdown 语法简要备忘
标题 # 一级标题 ## 二级标题 ### 三级标题 无序列表 前面加 - 或 * 即可变为 有序列表 直接用数字即可 1. 2. 3. 添加引用 > 图片与链接 插入链接与插入图片的语法很像, ...