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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

import java.net.*;
import java.io.*;
class  Sender implements Runnable
{
        public void run()
        {
                try
                {
                        DatagramSocket ds=new DatagramSocket(1234);//通过DategramSocket的对象建立UDP服务器既是用户数据协议:user datagram protocol
                        byte[] b;
                        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
                        while((b=br.readLine().getBytes())!=null)
                        {
                                DatagramPacket dp=new DatagramPacket(b,0,b.length,InetAddress.getByName("192.168.43.204"),2345);//确定数据并且将数据封包
                                ds.send(dp);//通过UDP服务器发送数据
                        }
                }
                catch (Exception e)
                {
                        throw new RuntimeException();
                }
        }
}
class Recer implements Runnable
{
        public  void run()
        {
                try
                {
                        DatagramSocket ds=new DatagramSocket(2345);//通过DategramSocket的对象建立UDP服务器既是用户数据协议:user datagram protocol
                        byte[] b=new byte[1024];
                        while (true)
                        {
                        DatagramPacket dp=new DatagramPacket(b,b.length);//确定数据并且将数据封包
                        ds.receive(dp);//通过UDP服务器接受数据b
                        System.out.println(dp.getAddress().getHostAddress()+":"+dp.getPort()+new String(dp.getData(),0,dp.getLength()));
                        }
                }
                catch (Exception e)
                {
                        throw new RuntimeException();
                }
        }
}

class Liaotian
{
        public static void main(String[] args) throws Exception
        {
                new Thread(new Sender()).start();
                new Thread(new Recer()).start();
        }
}
困惑有下:
1,多线程在这儿为什么不加锁
2,这个小程序上面的在对数据进行封包的时候为何不能搞个广播地址,192.168.1.255;一弄成这样就接收不到

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

1 个回复

倒序浏览
本帖最后由 几番意难相付 于 2013-12-5 19:00 编辑

1 多线程在这儿为什么不加锁
  要理解这个问题 首先要明白在什么时候才需要使用同步
  也就是当多个线程同时操作同一个资源的时候使用同步 比如毕姥爷的视频中 那个售票的例子 票的总数是 固定的 当多个线程 同时对总票数操作的时候 如果不加锁 就会出现同一张票被卖了2次或2次以上的情况
加了锁以后 当一个线程在卖一张票的时候 其他线程要等这张票被卖完才能卖下一张
而聊天程序 虽然使用了两个线程 但这两个线程一个负责接收 一个负责发送 并没有操作同一个数据 开两个线程只是为了将收发数据的功能整合在一起 你完全可以开两个窗口 一个负责接收 一个负责发送


2,这个小程序上面的在对数据进行封包的时候为何不能搞个广播地址,192.168.1.255;一弄成这样就接收不到


  代码已测试 完全没问题 看你在封包的时候 用的IP是192.168.43.204 提问中却问的是192.168.1.255 两个网段不一样 当然接收不到 你改成192.168.43.255再试试看呢?

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马