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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 工善器 高级黑马   /  2013-10-20 20:37  /  748 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
编写一个程序,用来聊天
要求:有收数据的部分,有发数据的部分
这两部分需要同时执行
所以用到多线程的部分
一个程序控制收,一个程序控制发
因为收和发誓不一致的,所以要定义两个run方法。
而且这两个方法要封装到不同的类中
*/
package en.itcast.java.tools;
import java.awt.Dialog;
import java.io.*;
import java.net.*;

import javax.management.RuntimeErrorException;
class Send implements Runnable
{
    private DatagramSocket ds;
    //发送和接受数据包的套接字
    public Send(DatagramSocket ds)
    {
        this.ds=ds;
    }
    //构造函数除了没有返回值,还没有什么?构造函数是有new关键字的
    //this.ds=ds 到底是个什么结构呢,他可以在其他函数中使用么。
    //这不是初始化么,初始化是构造器的本能呀
    public void run()
    {
        try
        {
            BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
            String line =null;
            while ((line=bufr.readLine())!=null) {
                byte[] buf=line.getBytes();
                DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.255"),10002);
                ds.send(dp);
                if("886".equals(line))
                {
                    break;
                }
                    
            }
        }
            catch (Exception e)
            {
                throw new RuntimeException("发送端失败!");
            }
        }
    }
    class Rece implements Runnable
    {
        
        private DatagramSocket ds;
        public Rece(DatagramSocket ds)//方法名与类名相同
        {
            this.ds=ds;
        }
        public void run()
        {
            try
            {
                while(true)
                {
                    byte[] buf=new byte[1024];
                    DatagramPacket dp=new DatagramPacket(buf, buf.length);
                    ds.receive(dp);
                    String ip=dp.getAddress().getHostAddress();
                    String data =new String(dp.getData(),0,dp.getLength());
                    if("886".equals(data))
                    {
                        System.out.println(ip+"离开聊天室");
                        break;
                        
                    }
                    System.out.println(ip+"---"+data);
                    
                }
            }
            catch(Exception e)
            {
                throw new RuntimeException("接收端失败");
               
            }
            
        }
    }   
   


public class ChatDemo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        DatagramSocket sendSocket=new DatagramSocket();
        DatagramSocket receSocket=new DatagramSocket(10002);

        new Thread(new Send(sendSocket)).start();
        new Thread(new Rece(receSocket)).start();
        
        

    }

}


评分

参与人数 1技术分 +1 收起 理由
To + 1 把自己的问题标注显眼一点哦

查看全部评分

5 个回复

倒序浏览
红色部分就是它定位的部分,我有点不理解,正在研究中 ,我有时候问问题并不是说想了好长时间,大家也看过我的帖子知道的,有的哥们被介意 ,把有的东西给大家一块看看那,我同时也在解决。
回复 使用道具 举报
复制你的代码,提示有异常,老毕说得好:
要么抛,要么try
回复 使用道具 举报
(1)DatagramSocket sendSocket=new DatagramSocket();
        DatagramSocket receSocket=new DatagramSocket(10002);
        会拋异常啊,要处理
(2)同时你send类 末尾少一个} 结束啊 ,检查清楚了

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 赞一个!

查看全部评分

回复 使用道具 举报

楼主你好,如果问题已解决请将帖子状态修改为提问结束,如果未解决请继续提问,谢谢合作
如果不会修改请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
大括号缺失的具体位置?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马