欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java Socket简易聊天工具

程序员文章站 2024-03-12 08:17:14
本文实例为大家分享了一款socket简易聊天工具,希望大家喜欢。 代码运行如图,看起来还不错 服务端 package qiu; import jav...

本文实例为大家分享了一款socket简易聊天工具,希望大家喜欢。

代码运行如图,看起来还不错

java Socket简易聊天工具

服务端

package qiu;

import java.awt.borderlayout;
import java.awt.event.actionevent;
import java.awt.event.actionlistener;
import java.awt.print.printable;
import java.io.bufferedreader;
import java.io.ioexception;
import java.io.inputstreamreader;
import java.io.printwriter;
import java.net.serversocket;
import java.net.socket;
import java.util.calendar;

import javax.swing.jbutton;
import javax.swing.jframe;
import javax.swing.jpanel;
import javax.swing.jscrollpane;
import javax.swing.jtextarea;
import javax.swing.jtextfield;

/**
 * 简单聊天软件的服务器
 * */
public class myserver extends jframe implements actionlistener{

 jtextarea jtextarea =null;//用来显示纯文本的单行区域
 jtextfield jtextfield=null;//可以允许用来编辑单行文本
 jbutton sendbutton=null;
 jpanel jpanel=null;
 jscrollpane jscrollpane =null;
 //把信息发给客户端对象
 printwriter printwriter =null;
/**
 * 服务端的主函数
 * */
public static void main(string[] args) {
 // todo auto-generated method stub
  new myserver();
}
/**
 * 服务端的构造函数,用来进行初始化
 * */
public myserver(){
 //这里是对gui的初始化
 jtextarea = new jtextarea();
 jtextfield= new jtextfield(20);
 sendbutton= new jbutton("发送");
 sendbutton.addactionlistener(this);
 sendbutton.setactioncommand("send");
 jscrollpane= new jscrollpane(jtextarea);
 jpanel = new jpanel();
 jpanel.add(jtextfield);//添加编辑框
 jpanel.add(sendbutton);//添加按钮

 //将两个面板添加布局
 this.add(jscrollpane,borderlayout.center);
 this.add(jpanel,borderlayout.south);

 this.setsize(400,300);
 this.settitle("聊天服务器");
 this.setdefaultcloseoperation(jframe.exit_on_close);//设置退出按钮
 this.setvisible(true);
 this.setresizable(true); 

 //下面是socket服务器的搭建
 try {
  //服务器监听
  serversocket ss = new serversocket(9988);
  //等待客户端连接
  socket socket = ss.accept();
  //获得客户端发送过来的数据的流
  bufferedreader br = new bufferedreader
    (new inputstreamreader(socket.getinputstream()));
  printwriter = new printwriter(socket.getoutputstream(),true);
  //读取从客户端发送过来的信息
  while(true){
   string info = br.readline();
   jtextarea.append("客户端 "+gettime()+"\r\n"+info+"\r\n");
  }

 } catch (ioexception e) {
  // todo auto-generated catch block
  e.printstacktrace();
 } }
/**
 * 用来获取当前的时间
 * @return 当前的时间
 */
public string gettime(){
 //可以对每个单独时间域进行修改
 calendar c = calendar.getinstance();
 int hour = c.get(calendar.hour_of_day);//获取小时
 int minute = c.get(calendar.minute);
 int second = c.get(calendar.second);

 return hour+":"+minute+":"+second; 
 }

/**
 * 当button被点击的时候调用
 */
@override
public void actionperformed(actionevent e) {
 // todo auto-generated method stub
 //当按钮按下的时候调用
 if(e.getactioncommand().equals("send")){
  //把服务器在jtextfield写的内容发送给客户端
  string info= jtextfield.gettext();
  jtextarea.append("服务器 "+gettime()+"\r\n"+info+"\r\n");
  printwriter.println(info);
  //清楚发送框内容
  jtextfield.settext("");

  } 
 }
}

客户端

package qiu;

import java.awt.borderlayout;
import java.awt.event.actionevent;
import java.awt.event.actionlistener;
import java.io.bufferedreader;
import java.io.ioexception;
import java.io.inputstreamreader;
import java.io.printwriter;
import java.net.socket;
import java.net.unknownhostexception;
import java.util.calendar;

import javax.swing.jbutton;
import javax.swing.jframe;
import javax.swing.jpanel;
import javax.swing.jscrollpane;
import javax.swing.jtextarea;
import javax.swing.jtextfield;

/**
 * 简单聊天软件的客户端
 * */
public class myclient extends jframe implements actionlistener{

 jtextarea jtextarea=null;
 jtextfield jtextfield=null;
 jpanel jpanel=null;
 jscrollpane jscrollpane=null;
 jbutton sendbutton=null;
 printwriter printwriter=null;

/**
 * 客户端的主函数
 * */
public static void main(string[] args) {
 // todo auto-generated method stub
  new myclient();
}
/**
 * 客户端构造函数用来初始化
 * */
public myclient(){
 //gui初始化
 jtextarea= new jtextarea();
 jtextfield=new jtextfield(20);
 sendbutton= new jbutton("发送");
 sendbutton.addactionlistener(this);
 sendbutton.setactioncommand("send");
 jscrollpane=new jscrollpane(jtextarea);
 jpanel=new jpanel();

 jpanel.add(jtextfield);
 jpanel.add(sendbutton);

 this.add(jscrollpane,borderlayout.center);
 this.add(jpanel,borderlayout.south);

 this.setsize(400, 300);
 this.settitle("聊天客户端");
 this.setdefaultcloseoperation(jframe.exit_on_close);
 this.setvisible(true);
 this.setresizable(true); 

 //socket通信代码
  try {
  socket s= new socket("127.0.0.1",9988);
  bufferedreader br = new bufferedreader
    (new inputstreamreader(s.getinputstream()));
  printwriter= new printwriter(s.getoutputstream(),true);
  while(true){
   //不停的读取服务器发过来的信息
   string string=br.readline();
   jtextarea.append("服务器 "+gettime()+"\r\n"+string+"\r\n");
   }

 } catch (unknownhostexception e) {
  // todo auto-generated catch block
  e.printstacktrace();
 } catch (ioexception e) {
  // todo auto-generated catch block
  e.printstacktrace();
 }
}

/**
 * 用来获取当前的时间
 * @return 当前的时间
 */
public string gettime(){
 //可以对每个单独时间域进行修改
 calendar c = calendar.getinstance();
 int hour = c.get(calendar.hour_of_day);//获取小时
 int minute = c.get(calendar.minute);
 int second = c.get(calendar.second);

 return hour+":"+minute+":"+second; 
}
/**
 * 当button被点击的时候调用
 */
@override
public void actionperformed(actionevent e) {
 // todo auto-generated method stub
 if(sendbutton.getactioncommand().equals("send")){
  string info= jtextfield.gettext();
  //将客户端发送的信息发送给服务端
  jtextarea.append("客户端 "+gettime()+"\r\n"+info+"\r\n");
  printwriter.println(info);
  jtextfield.settext("");
  }
 }
}

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