看看哪里不对,找不出来啊!- /*
- 编写一个聊天程序。
- 有收数据的部分,和发数据的部分
- 这两部分需要同时执行,就需要用到多线程技术
- 一个线程控制收 一个线程控制发
- 因为收和发动作是不一致的,所以要定义两个run方法
- 而且这两个方法要封装到不同的类中
- */
- //用键盘录入
- class UdpSend_Thread implements Runnable{
- private DatagramSocket ds;
- public UdpSend_Thread(DatagramSocket ds){
-
- }
- public void run(){
- try
- {
- BufferedReader bufr = new BufferedReader(
- new InputStreamReader(System.in));
- String line = null;
-
- while((line=bufr.readLine())!=null){
- if("886".equals(line)){
- break;
- }
- byte[] buf = line.getBytes();
- DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10003);
- //通过socket服务,将已有的数据包发送出去,通过send方法
- ds.send(dp);
- }
- }
- catch(Exception e)
- {
- throw new RuntimeException("发送失败");
- }
-
- }
-
- }
- //接收键盘录入
- class UdpRece_Thread implements Runnable
- {
- private DatagramSocket ds;
- public UdpRece_Thread(DatagramSocket ds){
-
- }
-
- public void run(){
- try
- {
- while(true){
- //定义数据包,用于存储数据
- byte[] buf = new byte[1024];
- DatagramPacket dp = new DatagramPacket(buf,buf.length);
-
- //通过服务的receive方法将受到的数据存入数据包中
- ds.receive(dp); //阻塞式方法,没数据就等
-
- //通过数据包的方法获取其中的数据
- String ip = dp.getAddress().getHostAddress();//获取ip
- String data = new String(dp.getData(),0,dp.getLength());
- int port = dp.getPort();
-
- System.out.println(ip+data+port);
- }
- }
- catch(Exception e)
- {
- throw new RuntimeException("接收失败");
- }
- }
-
-
- }
- class LiaoTian{
-
- public static void main(String[] args) throws Exception{
- DatagramSocket sendSocket = new DatagramSocket();
- DatagramSocket receSocket = new DatagramSocket(10003);
-
- new Thread(new UdpSend_Thread(sendSocket)).start();
- new Thread(new UdpRece_Thread(receSocket)).start();
- }
- }
复制代码 |