服务器代码:
- packagecn.itcast.chat;
- importjava.awt.Frame;
- importjava.awt.TextArea;
- importjava.awt.event.WindowAdapter;
- importjava.awt.event.WindowEvent;
- importjava.io.BufferedReader;
- importjava.io.IOException;
- importjava.io.InputStreamReader;
- importjava.io.PrintWriter;
- importjava.net.ServerSocket;
- importjava.net.Socket;
- importjava.util.ArrayList;
- importjava.util.List;
- publicclassChatServer{
- privateFrameframe;
- privateTextAreainfoArea;
- privateList<Socket>list;
- publicChatServer(){
- list=newArrayList();
- init();
- }
- publicvoidinit(){
- frame=newFrame("聊天的服务端");
- frame.setBounds(300,200,400,400);
- infoArea=newTextArea();
- frame.add(infoArea);
- myEvent();
- frame.setVisible(true);
- }
- publicvoidmyEvent(){
- frame.addWindowListener(newWindowAdapter(){
- @Override
- publicvoidwindowClosing(WindowEvente){
- for(Sockets:list){
- try{
- s.shutdownOutput();
- }catch(IOExceptione1){
- System.out.println("servershutout");
- }
- }
- System.exit(0);
- }
- });
- }
- publicvoidconnection(){
- try{
- ServerSocketss=newServerSocket(30000);
- while(true){
- Socketsocket=ss.accept();
- Stringip=socket.getInetAddress().getHostAddress();
- list.add(socket);
- infoArea.append(ip+"已进入到聊天室/r/n");
- ServerThreadst=newServerThread(list,socket,infoArea);
- newThread(st).start();
- }
- }catch(IOExceptione){
- System.out.println("监听端口失败");
- }
- }
- publicstaticvoidmain(String[]args){
- newChatServer().connection();
- }
- }
- classServerThreadimplementsRunnable{
- privateSocketsocket;
- privateList<Socket>list;
- privateTextAreainfoArea;
- publicServerThread(List<Socket>list,Socketsocket,TextAreainfoArea){
- this.list=list;
- this.socket=socket;
- this.infoArea=infoArea;
- }
- @Override
- publicvoidrun(){
- try{
- Stringip=socket.getInetAddress().getHostAddress();
- BufferedReaderbufr=
- newBufferedReader(newInputStreamReader(socket.getInputStream()));
- Stringline=null;
- while((line=bufr.readLine())!=null){
- for(Sockets:list){
- PrintWriterout=newPrintWriter(s.getOutputStream(),true);
- out.println(ip+":"+line);
- }
- }
- if(socket!=null){
- socket.close();
- infoArea.append(ip+"已离开聊天室!!!!!!/r/n");
- list.remove(socket);
- }
- }catch(IOExceptione){
- System.out.println("serverthreadexception"+e.toString());
- }
- }
- }
客户端代码:
- packagecn.itcast.chat;
- importjava.awt.Button;
- importjava.awt.Color;
- importjava.awt.FlowLayout;
- importjava.awt.Frame;
- importjava.awt.TextArea;
- importjava.awt.event.ActionEvent;
- importjava.awt.event.ActionListener;
- importjava.awt.event.WindowAdapter;
- importjava.awt.event.WindowEvent;
- importjava.io.BufferedReader;
- importjava.io.IOException;
- importjava.io.InputStreamReader;
- importjava.io.PrintWriter;
- importjava.net.Socket;
- importjava.net.UnknownHostException;
- publicclassChatClient{
- privateFrameframe;
- privateTextAreareceArea,sendArea;
- privateButtonsendBut;
- privateSocketsocket;
- publicChatClient(){
- init();
- }
- publicvoidinit(){
- frame=newFrame("聊天的客户端");
- frame.setBounds(300,200,500,420);
- frame.setLayout(newFlowLayout(FlowLayout.RIGHT));
- receArea=newTextArea(14,65);
- receArea.setEditable(false);
- receArea.setBackground(Color.white);
- sendArea=newTextArea(6,65);
- sendBut=newButton("发送");
- sendBut.setEnabled(false);
- frame.add(receArea);
- frame.add(sendArea);
- frame.add(sendBut);
- myEvent();
- frame.setResizable(false);
- frame.setVisible(true);
- initConnection();
- }
- publicvoidmyEvent(){
- sendBut.addActionListener(newActionListener(){
- @Override
- publicvoidactionPerformed(ActionEvente){
- if(socket!=null&&socket.isClosed()){
- receArea.append("通讯中断");
- sendBut.setEnabled(false);
- return;
- }
- Stringtext=sendArea.getText();
- try{
- PrintWriterout=newPrintWriter(socket.getOutputStream(),true);
- out.println(text);
- }catch(IOExceptione1){
- }
- sendArea.setText("");
- }
- });
- frame.addWindowListener(newWindowAdapter(){
- @Override
- publicvoidwindowOpened(WindowEvente){
- sendArea.requestFocus();
- }
- @Override
- publicvoidwindowClosing(WindowEvente){
- if(socket!=null){
- try{
- socket.shutdownOutput();
- }catch(IOExceptione1){
- System.out.println("shutout");
- }
- }
- System.exit(0);
- }
- });
- }
- publicvoidinitConnection(){
- try{
- socket=newSocket("192.168.1.254",30000);
- }catch(UnknownHostExceptione){
- receArea.append("未知主机");return;
- }catch(IOExceptione){
- receArea.append("网络服务失败");return;
- }
- sendBut.setEnabled(true);
- ClientThreadct=newClientThread(socket,receArea);
- newThread(ct).start();
- }
- publicstaticvoidmain(String[]args){
- newChatClient();
- }
- }
- classClientThreadimplementsRunnable{
- privateSocketsocket;
- privateTextAreareceArea;
- ClientThread(Socketsocket,TextAreareceArea){
- this.socket=socket;
- this.receArea=receArea;
- }
- @Override
- publicvoidrun(){
- BufferedReaderbufr=null;
- try{
- bufr=
- newBufferedReader(newInputStreamReader(socket.getInputStream()));
- Stringline=null;
- while((line=bufr.readLine())!=null){
- receArea.append(line+"/r/n");
- }
- if(socket!=null){
- socket.close();
- }
- }catch(IOExceptione){
- System.out.println("clientthreadexception"+e.toString());
- }
- }
- }
本文介绍了一个简单的聊天室系统的实现过程,包括服务器端和客户端的Java代码。该聊天室使用Socket进行通信,支持多用户连接并实时显示聊天信息。
818

被折叠的 条评论
为什么被折叠?



