基本信息
源码名称:聊天室swing(含服务器端以及客户端)
源码大小:0.03M
文件格式:.zip
开发语言:Java
更新时间:2019-07-11
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
package abc.chap16; import java.awt.BorderLayout; import java.awt.Container; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.*; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import java.net.UnknownHostException; import java.nio.ByteOrder; import java.util.Date; import java.util.Scanner; import java.util.concurrent.RejectedExecutionException; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class ChatGuiTest extends JFrame implements ActionListener{ private static final String PATCH="E:\\"; private static final String FILENAME="output.txt"; JTextField foreignIp; JTextField foreignPort; JTextField localIp; JTextField localPort; JTextArea receiveText; JTextArea sendText; JTextArea logText; JButton send; JButton close; JButton clear; JButton log; JButton linkbButton; ServerSocket serverSocket; public ChatGuiTest(){ setSize(700,400); JPanel topp=new JPanel(); String localIPS=null; try { localIPS=InetAddress.getLocalHost().getHostAddress(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } JLabel l1=new JLabel("远程IP"); foreignIp=new JTextField(localIPS); JLabel l2=new JLabel("远程端口"); foreignPort=new JTextField("2019"); JLabel l3=new JLabel("本地IP"); localIp=new JTextField(localIPS); JLabel l4=new JLabel("本地端口"); localPort=new JTextField("2019"); linkbButton=new JButton("监听"); linkbButton.addActionListener(this); topp.add(l1); topp.add(foreignIp); topp.add(l2); topp.add(foreignPort); topp.add(l3); topp.add(localIp); topp.add(l4); topp.add(localPort); topp.add(linkbButton); Container contentPanel = this.getContentPane(); contentPanel.add(topp,BorderLayout.NORTH); receiveText=new JTextArea(); sendText=new JTextArea(); logText=new JTextArea(); JScrollPane recjsPane=new JScrollPane(); recjsPane.setViewportView(receiveText); recjsPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); recjsPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); JScrollPane sendjsPane=new JScrollPane(); sendjsPane.setViewportView(sendText); sendjsPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); sendjsPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); JScrollPane logJsPane=new JScrollPane(); logJsPane.setViewportView(logText); logJsPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); logJsPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); JPanel centerpJPanel=new JPanel(); centerpJPanel.setLayout(new GridLayout(2,1)); centerpJPanel.add(recjsPane); centerpJPanel.add(sendjsPane); centerpJPanel.add(logJsPane); contentPanel.add(centerpJPanel); send=new JButton("发送"); close=new JButton("关闭"); clear=new JButton("清除"); log=new JButton("查看记录"); send.addActionListener(this); close.addActionListener(this); clear.addActionListener(this); log.addActionListener(this); JPanel botPanel=new JPanel(); botPanel.setLayout(new GridLayout(1,4)); botPanel.add(send); botPanel.add(close); botPanel.add(clear); botPanel.add(log); contentPanel.add(botPanel,BorderLayout.SOUTH); this.setVisible(true); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { new ChatGuiTest(); } @Override public void actionPerformed(ActionEvent arg0) { JButton button=(JButton) arg0.getSource(); if(button.getActionCommand().equals("发送")) { try { System.out.println(foreignIp.getText() "--" foreignPort.getText()); Socket socket=new Socket(foreignIp.getText(),Integer.parseInt(foreignPort.getText())); //输出流 //os是字节流 OutputStream os=socket.getOutputStream(); OutputStreamWriter osw=new OutputStreamWriter(os); String dateString=(new Date()).toLocaleString(); osw.write(dateString "<>" sendText.getText()); osw.close(); os.close(); socket.close(); FileOutputStream o = null; byte[] buff = new byte[]{}; try{ File file = new File(PATCH FILENAME); if(!file.exists()){ file.createNewFile(); } if(sendText.getText() != null && !sendText.getText().equals("")){ String str = sendText.getText() "\r\n"; buff=str.getBytes(); o=new FileOutputStream(file,true); o.write(buff); o.flush(); o.close(); } }catch(Exception e){ e.printStackTrace(); } } catch (Exception e) { e.printStackTrace(); } }else if(button.getActionCommand().equals("清除")) { sendText.setText(""); } else if(button.getActionCommand().equals("关闭")) { System.exit(0); } else if(button.getActionCommand().equals("查看记录")) { StringBuilder result = new StringBuilder(); try{ File file = new File(PATCH FILENAME); //构造一个BufferedReader类来读取文件 BufferedReader br = new BufferedReader(new FileReader(file)); String s = null; //使用readLine方法,一次读一行 while((s = br.readLine())!=null){ result.append(System.lineSeparator() s); } br.close(); }catch(Exception e){ e.printStackTrace(); } logText.setText(result.toString()); } else if(button.getActionCommand().equals("监听")) { if(serverSocket==null||!serverSocket.isBound()) { Thread thread=new Thread(new Runnable() { public void run() { while(true) accept(); } }); thread.start(); button.setEnabled(false); }else{ JOptionPane.showMessageDialog(null, "对不起,端口被占用!"); } } } public void accept() { try { int port=0; port=Integer.parseInt(localPort.getText()); serverSocket=new ServerSocket(port); Socket socket=serverSocket.accept(); InputStream is = socket.getInputStream(); InputStreamReader isr=new InputStreamReader(is); BufferedReader br=new BufferedReader(isr); char c[]=new char[1024]; int len=0; String s=""; while((len=br.read(c, 0, 1024))>0) { s=s String.valueOf(c,0,len); } String dateString="";//(new Date()).toLocaleString(); receiveText.setText(dateString "<>" s "\r\n" receiveText.getText()); br.close(); isr.close(); is.close(); socket.close(); serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } }