简单的聊天软件

//客户端

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实现 简单聊天软件的更多相关文章

  1. WPF使用socket实现简单聊天软件

    公司网络限制不能传文件,先贴部分代码 控件添加到界面就行,界面随意布局 项目结构: 1.解决方案 1.1. Client 1.2. Server Client: <Window x:Class= ...

  2. python练习四—简单的聊天软件

    python最强大的是什么?库支持!!有了强大的库支持,一个简单的聊天软件实现就更简单了,本项目思路如下 # 项目思路 1. 服务器的工作 * 初始化服务器 * 新建一个聊天房间 * 维护一个已链接用 ...

  3. Java语言实现简单FTP软件------>FTP软件主界面的实现(四)

    首先看一下该软件的整体代码框架                        1.首先介绍程序的主入口FTPMain.java,采用了一个漂亮的外观风格 package com.oyp.ftp; im ...

  4. Java语言实现简单FTP软件------>源码放送(十三)

    Java语言实现简单FTP软件------>FTP协议分析(一) Java语言实现简单FTP软件------>FTP软件效果图预览之下载功能(二) Java语言实现简单FTP软件----- ...

  5. Java语言实现简单FTP软件------>上传下载管理模块的实现(十一)

    1.上传本地文件或文件夹到远程FTP服务器端的功能. 当用户在本地文件列表中选择想要上传的文件后,点击上传按钮,将本机上指定的文件上传到FTP服务器当前展现的目录,下图为上传子模块流程图 选择好要上传 ...

  6. 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 ...

  7. java web利用mvc结构实现简单聊天室功能

    简单聊天室采用各种内部对象不适用数据库实现. 一个聊天室要实现的基本功能是:         1.用户登录进入聊天室, 2.用户发言 3.用户可以看见别人发言 刚才算是简单的需求分析了,现在就应该是进 ...

  8. 局域网聊天软件(winsocket)

    LANChat工作整理 2013/8/22 程序实现功能: 局域网聊天软件,启动即可找到在线设备,并能够进行简单的文字聊天. 其实下面这个框图已经说明了程序的绝大部分功能原理. 核心类的程序框图 我觉 ...

  9. 高仿QQ即时聊天软件开发系列之三登录窗口用户选择下拉框

    上一篇高仿QQ即时聊天软件开发系列之二登录窗口界面写了一个大概的布局和原理 这一篇详细说下拉框的实现原理 先上最终效果图 一开始其实只是想给下拉框加一个placeholder效果,让下拉框在未选择未输 ...

随机推荐

  1. dokuwiki语法

    dokuwiki是一个php写的维基系统,它的插件中包含markdown插件.但是markdown语法跟dokuwiki语法混着用会出现一些bug.所以还是学一下dokuwiki的语法吧. dokuw ...

  2. Ubuntu用户root密码设置

    我们在安装Ubuntu后发现个问题,就是不像Linux系统那样会在安装过程中设置root的密码,那以后如果需要root的权限时该如何操作呢? Ubuntu里有个命令叫sudo,是以管理员的身份运行命令 ...

  3. OGG_Oracle GoldenGate简介(概念)

    2014-03-01 Created By BaoXinjian

  4. iOS9中怎样在日历App中创建一个随意时间之前開始的提醒(三)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 假设认为写的不好请多提意见,假设认为不错请多多支持点赞.谢谢! hopy ;) 四.创建随意时间之前開始的提醒 如今我们找到了指定源中的指定日 ...

  5. 关于FSMC地址线的理解

    http://www.openedv.com/thread-33759-1-1.html (出处: OpenEdv-开源电子网)

  6. 从jar包中读取资源

    package myspider; import java.io.UnsupportedEncodingException; /** * * @author mark */ public class ...

  7. mac 安装android sdk

    1.下载sdk http://www.androiddevtools.cn/ 2.解压下载文件到目标文件夹 tar -xzvf android-sdk_r24.4.1-macosx.zip /User ...

  8. VS2012/13中即将增加InstallShield升级版

    对于Visual Studio 2012去掉了前作中的安装程序(Installer)项目模板,许多开发者都感到非常失望.这个流行的项目类型为开发者们提供了若干选项:除了InstallShield LE ...

  9. Windows中将javac和java两个命令集成到UltraEdit工具栏

    1. 目的 将javac和java两个命令集成到UltraEdit工具栏,以方便在UltraEdit中编辑简单的java文件后,能够直接进行编译,运行. 2. 环境 UrtalEdit版本18.20: ...

  10. [面试题] Find next higher number with same digits

    Find next higher number with same digits. Example 1 : if num = 25468, o/p = 25486 Example 2 : if num ...