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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© skill20 中级黑马   /  2014-5-15 18:02  /  1917 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.awt.Button;
  2. import java.awt.FlowLayout;
  3. import java.awt.Frame;
  4. import java.awt.TextArea;
  5. import java.awt.event.MouseAdapter;
  6. import java.awt.event.MouseEvent;
  7. import java.awt.event.WindowAdapter;
  8. import java.awt.event.WindowEvent;
  9. import java.io.IOException;
  10. import java.net.DatagramPacket;
  11. import java.net.DatagramSocket;
  12. import java.net.InetAddress;
  13. import java.net.SocketException;
  14. import java.net.UnknownHostException;

  15. public class TackTest {
  16.         private Frame f;
  17.         private Button b;
  18.         private TextArea tf_1,tf_2;
  19.         TackTest(){
  20.                 init();
  21.         }
  22.         public static void main(String[] args)throws Exception {               
  23.                  new TackTest();
  24.         }
  25.         public void init(){
  26.                 f = new Frame("聊天窗口");
  27.                 f.setBounds(300, 200, 500, 400);
  28.                 f.setLayout(new FlowLayout());
  29.                 tf_1 = new TextArea(15,65);
  30.                 tf_2 = new TextArea(6,55);
  31.                 b = new Button("发送消息");
  32.                 f.add(tf_1);
  33.                 f.add(tf_2);
  34.                 f.add(b);
  35.                 tf_1.setEditable(false);
  36.                 rec();
  37.                 event();
  38.                 f.setVisible(true);
  39.         }
  40.         public void rec(){
  41.                 try {
  42.                         //建立UDP服务,监听端口。
  43.                         final DatagramSocket re = new DatagramSocket(10000);               
  44.                         //建立一个线程,接收数据。       
  45.                         new Thread(new Runnable() {
  46.                                         @Override
  47.                                         public void run() {
  48.                                                 while (true) {
  49.                                                         byte[] buf = new byte[1024];
  50.                                                         try {
  51.                                                                 DatagramPacket dgp
  52.                                                                                 = new DatagramPacket(buf,buf.length);
  53.                                                                 //接收数据包。
  54.                                                                 re.receive(dgp);
  55.                                                                 //拆包。
  56.                                                                 String id = dgp.getAddress().getHostAddress();
  57.                                                                 String data = new String(buf,0,dgp.getLength());
  58.                                                                 //把数据写到接收消息窗口。
  59.                                                                 tf_1.append(id + data + "\n");       
  60.                                                         } catch (IOException e) {
  61.                                                                 e.printStackTrace();
  62.                                                         }
  63.                                                 }
  64.                                         }
  65.                                 }).start();       
  66.                 } catch (SocketException e) {               
  67.                         e.printStackTrace();
  68.                 }
  69.         }
  70.         private void event(){       
  71.                 f.addWindowListener(new WindowAdapter() {
  72.                         public void windowClosing(WindowEvent e){
  73.                                 System.exit(0);
  74.                         }
  75.                 });               
  76.                 b.addMouseListener(new MouseAdapter() {
  77.                         public void mouseClicked(MouseEvent e){
  78.                                 String str = tf_2.getText();
  79.                                 try {
  80.                                         //建立UDP服务。
  81.                                         DatagramSocket dgs = new DatagramSocket();
  82.                                         byte[] buf = str.getBytes();
  83.                                         //把写的数据打。
  84.                                         DatagramPacket dgp = new DatagramPacket(
  85.                                                         buf,
  86.                                                         buf.length,
  87.                                                         InetAddress.getByName("192.168.1.100"),
  88.                                                         10000);
  89.                                         //数据包发送。
  90.                                         dgs.send(dgp);
  91.                                         //清空发送窗口数据。
  92.                                         tf_2.setText("");
  93.                                         dgs.close();
  94.                                 } catch (SocketException e1) {
  95.                                         e1.printStackTrace();
  96.                                 } catch (UnknownHostException e1) {                                       
  97.                                         e1.printStackTrace();
  98.                                 } catch (IOException e1) {                               
  99.                                         e1.printStackTrace();
  100.                                 }                               
  101.                         }
  102.                 });
  103.         }       
  104. }       
复制代码
不晓得搞的这个代码可以不?哪里还要再优化下?

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

7 个回复

倒序浏览
代码怎么复制的,为什么我使用ctr+v的代码没有行数,而且看着老丑了
回复 使用道具 举报
谭荣强 发表于 2014-5-16 17:53
代码怎么复制的,为什么我使用ctr+v的代码没有行数,而且看着老丑了

。。。放Eclipse上不,我在Eclipse上写的。
回复 使用道具 举报
skill20 发表于 2014-5-16 18:23
。。。放Eclipse上不,我在Eclipse上写的。

我是说从eclipse复制到贴子里,直接选中,复制,粘贴吗。
回复 使用道具 举报
谭荣强 发表于 2014-5-16 21:43
我是说从eclipse复制到贴子里,直接选中,复制,粘贴吗。

在输入表情的前面有个专门放代码的。
回复 使用道具 举报
skill20 发表于 2014-5-16 23:09
在输入表情的前面有个专门放代码的。

原来如此
回复 使用道具 举报
:lol原来如此,学习一下
回复 使用道具 举报
看看好用不。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马