java实现简单聊天室单人版
本文实例为大家分享了java实现简单聊天室的具体代码,供大家参考,具体内容如下
先整理下思路:
1.创建一个通信服务端,传入端口号和相关的流后等待客户端连接,并初始化图形界面。
2.创建一个JFrame,用于写出聊天的界面,这里界面名称由其他类传入。
3.把客户端创建的方法写进JFrame(当然这里很粗糙的方法)
4.设置按钮的监听事件,发送消息和离线功能
首先创建一个服务端的类
importjava.io.IOException;
importjava.net.ServerSocket;
importjava.net.Socket;
importcom.jero.jframe.ChatSocketJFrame;
//创建服务端
publicclassChatServerSocket{
//构造初始化方法
publicChatServerSocket(Stringname,intport)throwsIOException{
//创建Socket服务连接对象
ServerSocketserverSocket=newServerSocket(port);
//等待客户端连接
Socketclient=serverSocket.accept();
//初始化聊天界面
try{
newChatSocketJFrame(name,client);
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
//关闭流
serverSocket.close();
}
publicstaticvoidmain(String[]args)throwsException{
newChatServerSocket("服务端",8001);//启动服务端,指定网名和端口
}
}
packagecom.jero.jframe;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.io.PrintWriter;
importjava.net.InetAddress;
importjava.net.Socket;
importjava.net.UnknownHostException;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
importjavax.swing.JScrollPane;
importjavax.swing.border.EmptyBorder;
importcom.jero.socket.ChatServerSocket;
importjavax.swing.JTextPane;
importjavax.swing.JTextField;
importjavax.swing.JButton;
importjavax.swing.JTextArea;
publicclassChatSocketJFrameextendsJFrameimplementsActionListener{
privateSocketsocket;
privateStringname;
privateJButtonBT_SEND,BT_LEAVE,BT_LOGIN;
privateJTextAreatextArea;
privateJPanelcontentPane;
privateJTextFieldtextField;
privatePrintWritercout;
/**
*Launchtheapplication.
*@throwsException
*@throwsIOException
*@throwsUnknownHostException
*/
publicstaticvoidmain(String[]args)throwsUnknownHostException,IOException,Exception{
//实例化界面以及客户端
newChatSocketJFrame("客户端","127.0.0.1",8001);
}
/**
*Createtheframe.
*/
publicChatSocketJFrame(Stringname,Socketsocket)throwsException,IOException{
//聊天室界面
super("聊天室"+name+""+InetAddress.getLocalHost()+""+socket.getPort());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100,100,733,519);
this.textArea=newJTextArea();
this.textArea.setEditable(false);
this.getContentPane().add(newJScrollPane(this.textArea));
JPanelpanel=newJPanel();
this.getContentPane().add(panel,"South");
this.textField=newJTextField(16);
panel.add(this.textField);
BT_SEND=newJButton("发送");
panel.add(BT_SEND);
BT_SEND.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
//TODOAuto-generatedmethodstub
System.out.println("按钮已点击");
cout.println(name+"说:"+textField.getText()+"\n");
textArea.append("我说:"+textField.getText()+"\n");
textField.setText("");
}
});
BT_LEAVE=newJButton("离线");
panel.add(BT_LEAVE);
BT_LEAVE.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
//TODOAuto-generatedmethodstub
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=newPrintWriter(socket.getOutputStream(),true);
//把网名传给对方
this.cout.println(name);
//获得Socket对象的输入流,创建字符输入流
BufferedReaderbuff=newBufferedReader(newInputStreamReader(socket.getInputStream()));
//接受对方的网名
Stringaline=buff.readLine();
//显示对方发送的内容
textArea.append("连接"+aline+"成功!!\n");
aline=buff.readLine();
//如果内容不为空并且对方不离线,则相互传送消息
while(aline!=null&&!aline.equals("bye")){
textArea.append(aline+"\r\n");
aline=buff.readLine();
}
//当对方离线时,关闭所有的流
buff.close();
cout.close();
socket.close();
//把按钮设置为不可操作
BT_SEND.setEnabled(false);
BT_LEAVE.setEnabled(false);
}
/**
*@wbp.parser.constructor
*/
publicChatSocketJFrame(Stringname,Stringhost,intport)throwsUnknownHostException,IOException,Exception{
//创建客户端
this(name,newSocket(host,port));
}
@Override
publicvoidactionPerformed(ActionEvente){
//TODOAuto-generatedmethodstub
//可以把动作监听写进此函数,这个就不演示了
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。