UDP通信

来源:互联网 发布:2007excel软件下载 编辑:程序博客网 时间:2024/05/18 21:41

package org;

 

import java.io.BufferedInputStream;

import java.io.BufferedReader;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.InterfaceAddress;

 

public class UDPClient {

 

    public static void main(String[] args) {

      

       DatagramSocket socket; //用于发送/接收UDP

       DatagramPacket packet; //用于保存UDP的内容

       InetAddress address;

       int port;

       byte[] buf1=new byte[1000],buf2=new byte[1000];

       String s="Hello,server!",s2;

//     if(args.length<3){

//         System.out.println("输入本地端口号,服务器名,服务器端口号");

//         System.exit(0);

//     }

       try{

//         String ss="";

//         InputStreamReader isr=new InputStreamReader(System.in);

//         BufferedReader in=new BufferedReader(isr);

//         while(true){

//            ss=in.readLine();

//            if(ss.equals("end")){

//                break;

//            }

//            String sss[]=ss.split(" ");

//            System.out.println(sss.length);

//            for(int i=0;i<sss.length;i++){

//                System.out.println(sss[i]);

//            }

              socket=new DatagramSocket(2777);   //Socket连接到本机的2777端口上

              address=InetAddress.getByName("192.168.0.5"); 

              port = 1777;

              buf1=s.getBytes();

              //参数分别表示:发送数据报的字节数组,发送数据报的长度,发送数据报的目的地址即接收者IP,发送数据报的端口

              packet=new DatagramPacket(buf1,buf1.length,address,port);

              socket.send(packet);  //向服务器发送packet

             

              //参数分别表示:接收数据报的字节数组,接收数据报的长度即读取的字节数

              packet=new DatagramPacket(buf2,buf2.length);  //生成接收的packet

              socket.receive(packet);  //接收服务器传来的packet

              s2= new String(packet.getData());

              System.out.println("Received from server:"+s2);  //打印packet内容

              socket.close();   //关闭Socket  

           //}

                 

       }catch(Exception e){

           System.out.println("Error:"+e);

       }

 

    }

 

}

 

package org;

 

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.SocketException;

 

public class UDPServer extends Thread {

    //启动服务器线程的主程序

    private DatagramPacket packet;

    private DatagramSocket socket;

    static final int sport=1777;

    UDPServer(){

    //Socket连接到本机的一个可用端口上

    try {

           socket = new DatagramSocket(sport);

           System.out.println("Listening on port:"+socket.getLocalPort());

    } catch (Exception e) {

           System.out.println("Error:"+e);

       }

    }

    public void run(){

    //线程的主要操作

    if(socket==null){

        return ;

    }

    while(true){

        try{

        InetAddress address;

        int cport;

        byte[] buf1=new byte[1000],buf2=new byte[1000];

        String s="Your packet is received";

        packet=new DatagramPacket(buf1,buf1.length);   //生成一个接收数据报

        socket.receive(packet);  //接收数据报

        String s1=new String(packet.getData());

        System.out.println("Received from client:"+s1);  //打印数据报的内容

        address=packet.getAddress();

        cport=packet.getPort();   //获得数据报的源地址和端口

        buf2=s.getBytes();

        packet=new DatagramPacket(buf2,buf2.length,address,cport);  //生成发送的数据报

        socket.send(packet);

        }catch(Exception e){

            System.out.println("Error:"+e);

        }

    }

//      protected void finalize(){

//          if(socket !=null){

//             socket.close();

//             System.out.println("Socket Closed.");

//          }

//      }

    }

}

 

 

package org;

 

public class c15_7 {

 

    public static void main(String[] args) {

       UDPServer server=new UDPServer();

       server.start();

    }

 

}

 

原创粉丝点击