栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java实现简单聊天室单人版

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java实现简单聊天室单人版

本文实例为大家分享了java实现简单聊天室的具体代码,供大家参考,具体内容如下

先整理下思路:

1.创建一个通信服务端,传入端口号和相关的流后等待客户端连接,并初始化图形界面。
2.创建一个Jframe,用于写出聊天的界面,这里界面名称由其他类传入。
3.把客户端创建的方法写进Jframe(当然这里很粗糙的方法)
4.设置按钮的监听事件,发送消息和离线功能

首先创建一个服务端的类

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import com.jero.jframe.ChatSocketJframe;
//创建服务端
public class ChatServerSocket{
  //构造初始化方法
  public ChatServerSocket(String name,int port) throws IOException{
    //创建Socket服务连接对象  
      ServerSocket serverSocket = new ServerSocket(port);
    //等待客户端连接
      Socket client = serverSocket.accept();
    //初始化聊天界面  
      try {
 new ChatSocketJframe(name,client);
      } catch (Exception e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
      }
    //关闭流
      serverSocket.close();
  }
  public static void main(String[] args) throws Exception{
    new ChatServerSocket("服务端",8001);//启动服务端,指定网名和端口
  }

}
package com.jero.jframe;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.swing.Jframe;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.EmptyBorder;

import com.jero.socket.ChatServerSocket;

import javax.swing.JTextPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.Jtextarea;

public class ChatSocketJframe extends Jframe implements ActionListener {
  private Socket socket;
  private String name;
  private JButton BT_SEND,BT_LEAVE,BT_LOGIN;
  private Jtextarea textarea;
  private JPanel contentPane;
  private JTextField textField;
  private PrintWriter cout;
  
  public static void main(String[] args) throws UnknownHostException, IOException, Exception {
    //实例化界面以及客户端
    new ChatSocketJframe("客户端","127.0.0.1",8001);
  }

  
  public ChatSocketJframe(String name, Socket socket)throws Exception, IOException {
    //聊天室界面
    super("聊天室"+name+" "+InetAddress.getLocalHost()+" "+socket.getPort());
    setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
    setBounds(100, 100, 733, 519);
    this.textarea = new Jtextarea();
    this.textarea.setEditable(false);
    this.getContentPane().add(new JScrollPane(this.textarea));
    JPanel panel = new JPanel();
    this.getContentPane().add(panel, "South");
    this.textField = new JTextField(16);
    panel.add(this.textField);
    BT_SEND = new JButton("发送");
    panel.add(BT_SEND);
    BT_SEND.addActionListener(new ActionListener() {

      @Override
      public void actionPerformed(ActionEvent e) {
 // TODO Auto-generated method stub
 System.out.println("按钮已点击");
 cout.println(name+"说: "+textField.getText()+"n");
 textarea.append("我说: "+textField.getText()+"n");
 textField.setText("");
      }
    });
    BT_LEAVE = new JButton("离线");
    panel.add(BT_LEAVE);
    BT_LEAVE.addActionListener(new ActionListener() {

      @Override
      public void actionPerformed(ActionEvent e) {
 // TODO Auto-generated method stub
 textarea.append("我离线");
 cout.println(name+"离线n"+"bye");
 BT_LEAVE.setEnabled(false);
 BT_SEND.setEnabled(false);
      }
    });
    this.setVisible(true);
    //开始创建通信
    this.socket = socket;
    this.name = name;
    //获得Socket的输出流并立即刷新
    this.cout = new PrintWriter(socket.getOutputStream(),true);
    //把网名传给对方
    this.cout.println(name);
    //获得Socket对象的输入流,创建字符输入流
    BufferedReader buff = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    //接受对方的网名
    String aline = buff.readLine();
    //显示对方发送的内容
    textarea.append("连接"+aline+"成功!!n");
    aline = buff.readLine();
    //如果内容不为空并且对方不离线,则相互传送消息
    while(aline!=null&&!aline.equals("bye")){

      textarea.append(aline+"rn");
      aline = buff.readLine();
    }
    //当对方离线时,关闭所有的流
    buff.close();
    cout.close();
    socket.close();
    //把按钮设置为不可操作
    BT_SEND.setEnabled(false);
    BT_LEAVE.setEnabled(false);
  }


  
  public ChatSocketJframe(String name,String host,int port) throws UnknownHostException, IOException, Exception{
    //创建客户端
    this(name,new Socket(host,port));
  }

  @Override
  public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    //可以把动作监听写进此函数,这个就不演示了
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/140394.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号