java Socket简易聊天工具
程序员文章站
2024-03-12 19:48:50
本文实例为大家分享了一款socket简易聊天工具,希望大家喜欢。
代码运行如图,看起来还不错
服务端
package qiu;
import jav...
本文实例为大家分享了一款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(""); } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: Docker 镜像的使用