本文实例为大家分享了一款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("");
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。
希望与广大网友互动??
点此进行留言吧!