实例介绍
【实例简介】
【实例截图】
【核心代码】
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(); } } }
好例子网口号:伸出你的我的手 — 分享!
相关软件
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论