A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 余旋 中级黑马   /  2015-11-9 13:43  /  423 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package com.jwis.cos;

  2. import java.awt.Button;
  3. import java.awt.FlowLayout;
  4. import java.awt.Frame;
  5. import java.awt.TextArea;
  6. import java.awt.TextField;
  7. import java.awt.event.ActionEvent;
  8. import java.awt.event.ActionListener;
  9. import java.awt.event.KeyAdapter;
  10. import java.awt.event.KeyEvent;
  11. import java.awt.event.WindowAdapter;
  12. import java.awt.event.WindowEvent;
  13. import java.io.IOException;
  14. import java.net.DatagramPacket;
  15. import java.net.DatagramSocket;
  16. import java.net.InetAddress;
  17. import java.net.SocketException;
  18. import java.net.UnknownHostException;

  19. public class UDPChatFrame {
  20.         public static void main(String[] args) {
  21.                 try {
  22.                         DatagramSocket sendSocket = new DatagramSocket();
  23.                         DatagramSocket recvSocket = new DatagramSocket(10000);
  24.                         SendMsg send = new SendMsg(sendSocket);
  25.                         ChatWindow chat = new ChatWindow();
  26.                         chat.Rec(send);
  27.                         RecvMsg recv = new RecvMsg(recvSocket,chat);
  28.                         Thread rec = new Thread(recv);
  29.                         rec.start();
  30.                 } catch (SocketException e) {
  31.                         // TODO Auto-generated catch block
  32.                         e.printStackTrace();
  33.                 }
  34.         }
  35. }

  36. class SendMsg implements Runnable
  37. {
  38.         private DatagramSocket socket;
  39.         private String Message;
  40.         public void Message(String Message) {
  41.                 // TODO Auto-generated method stub
  42.                 this.Message = Message;
  43.         }
  44.         public SendMsg(DatagramSocket socket) {
  45.                 // TODO Auto-generated constructor stub
  46.                 this.socket = socket;
  47.         }
  48.         @Override
  49.         public void run() {
  50.                 // TODO Auto-generated method stub
  51.                 byte [] sends = new byte[1024];
  52.                 sends = Message.getBytes();
  53.                 try {
  54.                         DatagramPacket packet =
  55.                                         new DatagramPacket(sends, sends.length, InetAddress.getByName("192.168.1.104"), 10000);
  56.                         socket.send(packet);
  57.                 } catch (UnknownHostException e) {
  58.                         // TODO Auto-generated catch block
  59.                         e.printStackTrace();
  60.                 } catch (IOException e) {
  61.                         // TODO Auto-generated catch block
  62.                         e.printStackTrace();
  63.                 }
  64.         }
  65.        
  66. }
  67. class RecvMsg implements Runnable
  68. {
  69.         private DatagramSocket socket;
  70.         private ChatWindow chat;
  71.         public RecvMsg(DatagramSocket socket,ChatWindow chat) {
  72.                 // TODO Auto-generated constructor stub
  73.                 this.socket = socket;
  74.                 this.chat = chat;
  75.         }
  76.         @Override
  77.         public void run() {
  78.                 // TODO Auto-generated method stub
  79.                 try {
  80.                         while(true)
  81.                         {
  82.                                 byte [] recv = new byte[1024];
  83.                                 DatagramPacket packet = new DatagramPacket(recv, recv.length);
  84.                                 socket.receive(packet);
  85.                                 String data =new String(packet.getData(),0,packet.getLength());
  86.                                 String name =packet.getAddress().getHostAddress();
  87.                                 chat.output.append(name+":\r\n"+data+"\r\n");
  88.                         }
  89.                 } catch (IOException e) {
  90.                         // TODO Auto-generated catch block
  91.                         e.printStackTrace();
  92.                 }
  93.         }
  94.        
  95. }
  96. class ChatWindow
  97. {
  98.         private Frame frame;
  99.         public TextArea output;
  100.         private TextField input;
  101.         private Button button;
  102.         private SendMsg send= null;
  103.         public void Rec(SendMsg send) {
  104.                 // TODO Auto-generated method stub
  105.                 this.send = send;
  106.         }
  107.         public ChatWindow() {
  108.                 // TODO Auto-generated constructor stub
  109.                 frame = new Frame("chatroom");
  110.                 frame.setBounds(100, 100, 450, 500);
  111.                 frame.setLayout(new FlowLayout());
  112.                 output = new TextArea(null, 20, 50,1);
  113.                 input = new TextField(30);
  114.                 button = new Button("send");
  115.                 frame.add(output);
  116.                 frame.add(input);
  117.                 frame.add(button);
  118.                 myEvents();
  119.                 frame.setVisible(true);
  120.         }
  121.         private void myEvents() {
  122.                 // TODO Auto-generated method stub
  123.                 frame.addWindowListener(new WindowAdapter() {
  124.                         public void windowClosing(WindowEvent e)
  125.                         {
  126.                                 System.exit(0);
  127.                         }
  128.                 });
  129.                 button.addActionListener(new ActionListener() {
  130.                        
  131.                         @Override
  132.                         public void actionPerformed(ActionEvent e) {
  133.                                 // TODO Auto-generated method stub
  134.                                 String s = input.getText();
  135.                                 send.Message(s);
  136.                                 Thread sendMessage = new Thread(send);
  137.                                 sendMessage.start();
  138.                                 input.setText(null);
  139.                         }
  140.                 });
  141.                 input.addKeyListener(new KeyAdapter() {
  142.                         public void keyPressed(KeyEvent e)
  143.                         {
  144.                                 if(e.getKeyCode()==KeyEvent.VK_ENTER)
  145.                                 {
  146.                                         String s = input.getText();
  147.                                         send.Message(s);
  148.                                         Thread sendMessage = new Thread(send);
  149.                                         sendMessage.start();
  150.                                         input.setText(null);
  151.                                 }
  152.                         }
  153.                 });
  154.         }
  155. }
复制代码

由于只有一个人无法进行测试。。。希望有人能够一起交流下

2 个回复

倒序浏览
OK,已经测试过,没问题~不过建议在发送的时候加一个过滤,空字符串不能发送,不然一直按Enter就一直出192.168.1.110加空字符串




回复 使用道具 举报
强大的楼主,向楼主学习
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马