基于UDP实现双工通信(JAVA)(多线程)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

写个基础的JAVA网络程序,实现双工通信


一、两个类

1.一个类

代码如下(示例):

import java.io.IOException;
import java.net.*;
import java.util.Scanner;

public class send {


    public static void main(String[] args) throws IOException {




            Thread t1 = new send.re();

            Thread t2 = new send.se();

            t1.start();
            t2.start();




        }


        static class re extends Thread {
            DatagramSocket ds;

           re() throws SocketException {
             ds = new DatagramSocket(3000);
           }

                public void run() {
                while (true) {


                    byte[] bys = new byte[1024];

                    DatagramPacket dp = new DatagramPacket(bys, bys.length);

                    try {
                        ds.receive(dp);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    System.out.print(dp.getAddress().getHostAddress()+":"+dp.getPort()+"--->");
                    System.out.println(new String(bys, 0, dp.getLength()));

                }


            }
        }


        static class se extends Thread {
            @Override
            public void run() {
                DatagramSocket ds = null;
                try {
                    ds = new DatagramSocket();
                } catch (SocketException e) {
                    e.printStackTrace();
                }

                while (true) {
                    Scanner sc=new Scanner(System.in);

                    String s = sc.nextLine();

                    byte[] bys = s.getBytes();
                    int len = bys.length;

                    DatagramPacket dp = null;
                    try {
                        dp = new DatagramPacket(bys, len, InetAddress.getByName("127.0.0.1"), 8954);
                    } catch (UnknownHostException e) {
                        e.printStackTrace();
                    }


                    try {
                        ds.send(dp);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }


                }


            }


        }

2.另一个类

代码如下(示例):


import java.io.IOException;
import java.net.*;
import java.util.Scanner;

public class receive {


    public static void main(String[] args) throws IOException {

Thread t1=new re();

Thread t2=new se();

t1.start();
t2.start();



/*
        DatagramSocket ds=new DatagramSocket(10086);

        byte []bys=new byte[1024];

        DatagramPacket dp=new DatagramPacket(bys,bys.length);

        ds.receive(dp);

        System.out.println(new String(bys,0,dp.getLength()));
*/

    }


  static class re extends Thread{


      @Override
      public void run() {
          DatagramSocket ds= null;
          try {
              ds = new DatagramSocket(8954);
          } catch (SocketException e) {
              e.printStackTrace();
          }
          while(true){




              byte []bys=new byte[1024];

              DatagramPacket dp=new DatagramPacket(bys,bys.length);

              try {
                  ds.receive(dp);
              } catch (IOException e) {
                  e.printStackTrace();
              }
              System.out.print(dp.getAddress().getHostAddress()+":"+dp.getPort()+"--->");
              System.out.println(new String(bys,0,dp.getLength()));

          }



      }
  }


 static class se extends Thread{
     DatagramSocket ds;
    se() throws SocketException {
      ds = new DatagramSocket();
    }
          public void run() {
          while(true){

              Scanner sc=new Scanner(System.in);
              String s = sc.nextLine();


              byte [] bys=s.getBytes();
int len =bys.length;

              DatagramPacket dp= null;
              try {
                  dp = new DatagramPacket(bys,len, InetAddress.getByName("127.0.0.1"),3000);
              } catch (UnknownHostException e) {
                  e.printStackTrace();
              }


              try {
                  ds.send(dp);
              } catch (IOException e) {
                  e.printStackTrace();
              }


          }




      }


  }





}


总结

一个类里两个套接,一个发送,一个接受。两个发送端口未指定,系统随机分配。两个发送打包端口各自指向另一个类里的接受套接。。。。。。。。

结束!!!!

  • 18
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值