java聊天软件_Java实现 简单聊天软件

//客户端

packageyjd9;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;import java.io.*;importjava.net.Socket;importjava.util.logging.Level;importjava.util.logging.Logger;import javax.swing.*;public class MyClient extends JFrame implementsActionListener, Runnable {

Socket clientSocket;

JTextArea jTextReceive= newJTextArea();

JTextField jTextSend= newJTextField();

JButton jbc= new JButton("发送");

JScrollPane jsp= newJScrollPane(jTextReceive);boolean flag = true; //标记是否结束

Thread connenThread; //用于向服务器端发送信息

DataInputStream cin1;

DataOutputStream cout;static boolean flagclient = false;public static voidmain(String[] args) {newMyClient().clientStart();

}public synchronized void changeFlag(booleant) {

flagclient=t;

}public voidclientStart() {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= newDataInputStream(clientSocket.getInputStream());try (OutputStream os =clientSocket.getOutputStream()) {

cout= newDataOutputStream(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);

}

}

@Overridepublic voidrun() {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);

}

}

}

@Overridepublic voidactionPerformed(ActionEvent e) {

JButton jbt=(JButton) e.getSource();if (jbt == jbc) //若单击确认对话框中的“发送”按钮

{

changeFlag(true);

}

}

}//服务器端

packageyjd9;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;import java.io.*;importjava.net.ServerSocket;importjava.net.Socket;importjava.util.logging.Level;importjava.util.logging.Logger;import javax.swing.*;public class Myserver extends JFrame implementsActionListener, Runnable {

JTextArea jTextReceive= newJTextArea();

JTextField jTextSend= newJTextField();

JButton jbs= new JButton("发送");

ServerSocket server= null;

JScrollPane jsp= newJScrollPane(jTextReceive);

Socket clientSocket;//负责当前线程中C/S通信中的Socket对象

boolean flag = true; //标记是否结束

Thread connenThread; //向客户端发送信息的线程

BufferedReader sin; //输入流对象

DataInputStream sin1;

DataOutputStream sout;//输出流对象

boolean flags = false;public static voidmain(String[] args) {

Myserver MS= newMyserver();

MS.serverStart();

}public synchronized void changeFlag(booleant){

flags=t;

}public voidserverStart() {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(newInputStreamReader(is));try (OutputStream os =clientSocket.getOutputStream()) {

sin1= newDataInputStream(clientSocket.getInputStream());

sout= newDataOutputStream(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);

}

}

@Overridepublic voidrun() {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);

}

}

}

@Overridepublic void finalize() //析构方法

{try{

server.close();

}//停止ServerSocket服务

catch(IOException e) {

System.out.println(e);

}

}

@Overridepublic voidactionPerformed(ActionEvent e) {

JButton jbt=(JButton) e.getSource();if (jbt == jbs) //若单击确认对话框中的“发送”按钮

{

changeFlag(true);

}

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值