转载自网上的即时通讯 稍微修改了一下bug
2017-07-23 12:12
316 查看
package test3; import java.awt.Button; import java.awt.Color; import java.awt.Font; import java.awt.Frame; import java.awt.Label; import java.awt.TextArea; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.text.SimpleDateFormat; import java.util.Date; import javax.swing.JOptionPane; public class Chat { public static void main(String[] args) { new MyFrame(); new MyEvent(); Thread thread = new Thread(new MyRecevier()); thread.start(); } } class MySend { public MySend() throws Exception { DatagramSocket dSocket = new DatagramSocket(10000); byte[] buf = ("from:" + InetAddress.getLocalHost().getHostAddress() + "\r\n" + MyEvent.myText) .getBytes(); System.out.println("收到内容:" + MyEvent.myText); DatagramPacket dPacket = new DatagramPacket(buf, buf.length, InetAddress.getByName(MyEvent.myIp), 8888);// 自定义 dSocket.send(dPacket); dSocket.close(); // 显示自己发的信息 // ----------------本机显示测试------------------// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYY/MM/dd HH:mm"); String date = simpleDateFormat.format(new Date()); MyFrame.receField.append(date + "\r\nME:" + MyEvent.myText + "\r\n"); } } class MyRecevier implements Runnable { @SuppressWarnings("resource") @Override public void run() { DatagramSocket dSocket = null; try { dSocket = new DatagramSocket(8888); } catch (SocketException e1) { e1.printStackTrace(); } ; byte[] buf = new byte[1024]; DatagramPacket dPacket = new DatagramPacket(buf, buf.length); while (true) { try { dSocket.receive(dPacket); } catch (IOException e) { e.printStackTrace(); } String string = new String(dPacket.getData(), 0, dPacket.getLength()); // ----------------本机显示测试------------------// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYY/MM/dd HH:mm"); String date = simpleDateFormat.format(new Date()); MyFrame.receField.append(date + "\r\n" + string + "\r\n"); } } } class MyEvent { static String myIp = ""; static String myText; String myReceText; public MyEvent() { // 提交 MyFrame.btnPost.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { myIp = MyFrame.ipField.getText().toString().trim(); String[] strings = myIp.split("\\."); boolean t = true; if (strings.length != 4) { t = false; JOptionPane.showMessageDialog(null, "请输入正确的IP地址!"); } else { for (int i = 0; i < strings.length; i++) { // 告知此字符串是否匹配给定的正则表达式。 if (!strings[i] .matches("^[-+]?(([0-9]+)([.]([0-9]+))?|([.]([0-9]+))?)$")) { t = false; JOptionPane.showMessageDialog(null, "带有非数字字符!"); break; } else if (Integer.parseInt(strings[i]) > 255 || Integer.parseInt(strings[i]) < 0) { t = false; JOptionPane.showMessageDialog(null, "请输入正确的IP地址!"); break; } } } if (t) { myIp = MyFrame.ipField.getText().toString().trim(); System.out.println("目标IP:" + myIp); JOptionPane.showMessageDialog(null, "提交成功!"); } } }); // 清除 MyFrame.btnCancel.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { MyFrame.inputField.setText(" "); } }); // 发送并清除编辑内容 MyFrame.btnSend.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { myText = MyFrame.inputField.getText().toString().trim(); if (myIp.equals("")) { JOptionPane.showMessageDialog(null, "请输入目标IP并提交!"); } else if (myText.equals("")) { JOptionPane.showMessageDialog(null, "请输入内容再发送!"); } else { System.out.println("发送内容:" + myText); MyFrame.inputField.setText(" "); try { new MySend(); } catch (Exception e1) { e1.printStackTrace(); } } } }); // 刷新聊天记录 MyFrame.btnRecord.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { } }); } } class MyFrame { Frame frame; static Button btnSend, btnRecord, btnCancel, btnPost; static TextArea inputField, recordField, receField; static TextField ipField; MyFrame() { frame = new Frame("IP聊天"); frame.setSize(432, 500); frame.setLayout(null); frame.setLocation(400, 150); frame.setResizable(false); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); frame.setVisible(true); frame.setBackground(Color.gray); InputFrame(); } public void InputFrame() { Label label1 = new Label(); Label label2 = new Label("input IP :"); label1.setBounds(5, 10, 460, 200); label2.setBounds(8, 465, 80, 30); ipField = new TextField(); ipField.setBounds(85, 467, 148, 25); inputField = new TextArea("", 5, 10, TextArea.SCROLLBARS_VERTICAL_ONLY); recordField = new TextArea("", 5, 10, TextArea.SCROLLBARS_NONE); receField = new TextArea("", 5, 10, TextArea.SCROLLBARS_VERTICAL_ONLY); inputField.setBounds(5, 320, 420, 140); inputField.setBackground(new Color(234,234,234)); recordField.setBounds(430, 30, 165, 430); recordField.setBackground(new Color(234,234,234)); receField.setBounds(5, 30, 420, 285); receField.setBackground(new Color(234,234,234)); inputField.setFocusable(true); receField.setFocusable(false); recordField.setFocusable(false); ipField.setFont(new Font("Monospaced", Font.ITALIC, 15)); inputField.setFont(new Font("Monospaced", Font.ITALIC, 25)); receField.setFont(new Font("Monospaced", Font.ITALIC, 18)); recordField.setFont(new Font("Monospaced", Font.ITALIC, 15)); btnCancel = new Button("cancel"); btnSend = new Button("send"); btnRecord = 4000 new Button("Chalked Up"); btnPost = new Button("sumbit"); btnCancel.setBounds(295, 465, 60, 30); btnSend.setBounds(360, 465, 60, 30); btnRecord.setBounds(435, 465, 80, 30); btnPost.setBounds(240, 465, 50, 30); frame.add(inputField); frame.add(receField); frame.add(btnCancel); frame.add(btnSend); frame.add(btnPost); frame.add(label1); frame.add(label2); frame.add(ipField); } }
相关文章推荐
- Function ALV 简单实现HTML抬头的方法 网上转载的稍微加了一点修改内容
- 即时通讯smack4.1.0-添加好友遇到的bug
- findBug 错误修改指南(转载)
- 一个网上下载的ftp类(修改了其中几个bug)
- 【转载】今天的那年初春的即时通讯
- UltraGrid的Row,通过BindingSource,给ComboBox修改,修改后,内容无法即时反馈给UltraGrid的bug
- python的paramiko源码修改了一下,写了个操作命令的日志审计 bug修改
- 笑话(网上的,我修改了一下就不一样)
- Matlab子函数定义稍微转载一下
- .net3.0 SerialPort通讯的一点bug 提醒一下大家
- 即时通讯市场狼烟四起,jabber标准搅局中国(转载)
- 在网上看到的“循环和递归在算法中的应用”,感觉不错,转载一下
- 【转载】我只是随便说说的即时通讯
- js监听输入框值的即时变化onpropertychange、oninput(转载有修改)
- 基于jabber(XMPP)架设内部即时通讯服务- 转载
- 转载 测试如何更有效说服研发去修改bug?
- 一个支持40万并发用户的即时通讯架构介绍(转载)
- [置顶] Unity打包exe后去除原生窗口,使用自己的窗口控制UI,修改了网上的很多bug
- 即时通讯发消息出现ListView左边视图突然闪现,再加载右边视图的bug
- Linux命令常放置的位置与PATH变量设置 网上转载稍加修改