Java學習之路0803(URL、基於UDP的數據包網絡通信)

基於UDP的網絡通信是通過數據包進行數據傳輸,不需建立連接,不可靠
/*
 * 用UDP接發數據
 */
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Scanner;

public class UDPSend{
    public static void main(String[] args) {
        SendReceive receive=new SendReceive();
        SendSend send=new SendSend();
        Thread sendThread=new Thread(send);
        Thread receiveThread=new Thread(receive);
        System.out.println("乙----開始聊天");
        sendThread.start();
        receiveThread.start();
        try {
            sendThread.sleep(00);
            receiveThread.sleep(00);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

//      while (true) {
//          send(); 
//          receive();
//      }
//  }
}
}
public class UDPReceive {
    public static void main(String[] args) {
//      while (true) {
//          receive();
//          send();
//      }
        ReceiveReceive receive=new ReceiveReceive();
        ReceiveSend send=new ReceiveSend();
        Thread sendThread=new Thread(send);
        Thread receiveThread=new Thread(receive);
        System.out.println("甲----開始聊天");
        sendThread.start();
        receiveThread.start();
        try {
            sendThread.sleep(00);
            receiveThread.sleep(00);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

運行結果:
甲—-開始聊天
你說:2015年08月16日 17:06:07
你好,我是甲
開始發送
你說:2015年08月16日 17:06:20
你呢?
開始發送
你說:2015年08月16日 17:06:35
對方說:2015年08月16日 17:06:07
我是乙,你好,甲

乙—-開始聊天
你說:2015年08月16日 17:06:01
對方說:2015年08月16日 17:06:01
你好,我是甲
對方說:2015年08月16日 17:06:20
你呢?我是甲
我是乙,你好,甲
開始發送
你說:2015年08月16日 17:06:49

URL

* 將網頁上的圖片寫到文件上
 */
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;

public class ImgURLTest {
    public static void main(String[] args) {
        try {
            URL imgURL=new URL("http://pic.nipic.com/2007-11-09/2007119121849495_2.jpg");
            File imgfile=new File("d:\\3.jpg");
            if (!imgfile.exists()) {
                imgfile.createNewFile();
            }
            OutputStream os=new FileOutputStream(imgfile);
            InputStream is=imgURL.openStream();
            byte[] array=new byte[512];
            int i=is.read(array);
            while (i!=-1) {
                os.write(array, 0, i);
                i=is.read(array);

            }
            os.flush();
            os.close();
            is.close();
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
* 將網頁的源代碼打印出來
 */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

public class URLTest {
    public static void main(String[] args) {
        try {
            URL url=new URL("http://www.sina.com.cn/");
            InputStream is=url.openStream();
            InputStreamReader isr=new InputStreamReader(is);
            BufferedReader br=new BufferedReader(isr);
            String s=br.readLine();
            while (s!=null) {
                System.out.println(s);
                s=br.readLine();        
            }
            is.close();
            br.close();
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

基於UDP的多用戶通信

public class MyUDP1 implements Runnable{
    public static void main(String[] args) {
        int num1 = 0;
        int num2 = 0;

//      Scanner scanner=new Scanner(System.in);
//      System.out.println("請輸入對方端口號");
//      num1=scanner.nextInt();
//      System.out.println("請輸入本機端口號");
//      num2=scanner.nextInt();
//      System.out.println("以bye結束對話");
//      
//      Send s=new Send(num1,num2);
//      Receive r=new Receive(num1,num2);
        Send s=new Send(2,1);
        Receive r=new Receive(2,1);

        Thread ts=new Thread(s);
        Thread tr=new Thread(r);

        ts.start();
        tr.start();
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        int num1 = 0;
        int num2 = 0;
        Scanner scanner=new Scanner(System.in);
        System.out.println("請輸入對方端口號");
        num1=scanner.nextInt();
        System.out.println("請輸入本機端口號");
        num2=scanner.nextInt();
        System.out.println("以bye結束對話");

        Send s=new Send(num1,num2);
        Receive r=new Receive(num1,num2);

        Thread ts=new Thread(s);
        Thread tr=new Thread(r);

        ts.start();
        tr.start();
    }
}
public class UDPTest {
    public static void main(String[] args) {
        MyUDP1 myUDP1=new MyUDP1();
        Thread t1=new Thread(myUDP1);
        Thread t2=new Thread(myUDP1);
        t1.start();
        try {
            t1.sleep(10000);
            System.out.println("請等待10秒。。。");
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        t2.start();
    }
}
mport java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class Receive implements Runnable{
    private int num1;
    private int num2;

    public Receive(int num1,int num2) {
        this.num1=num1;
        this.num2=num2;
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        try {
//          Calendar rightnow=Calendar.getInstance();
//          SimpleDateFormat format=new SimpleDateFormat("yyyy年MM月dd日    HH:mm:ss");
//          String time=format.format(rightnow.getTime());
//          
            DatagramSocket receiver=new DatagramSocket
                    (this.num2);
            byte[] array=new byte[1024];
            DatagramPacket packet=new DatagramPacket
                    (array, 1024, InetAddress.getLocalHost(), this.num1);
//          receiver.receive(packet);
//          byte[] data=packet.getData(); 
//          System.out.println("對方說:"+time+"\n"+new String(data));
            while (true) {
                Calendar rightnow=Calendar.getInstance();
                SimpleDateFormat format=new SimpleDateFormat("yyyy/MM/dd    HH:mm:ss");
                String time=format.format(rightnow.getTime());

//              DatagramSocket receiver=new DatagramSocket
//                      (this.num2);
//              byte[] array=new byte[1024];
//              DatagramPacket packet=new DatagramPacket
//                      (array, 1024, InetAddress.getLocalHost(), this.num1);
                receiver.receive(packet);
                byte[] data=packet.getData(); 
                String s=new String(data);
                System.out.println(this.num1+":"+time+"\n"+s);
                String end=new String("8888");
                System.out.println(s+" "+end+" ");
                if (s.equals(end)) {
                    System.out.println("1對方通話結束");
                    receiver.close();
                    System.out.println("2對方通話結束");
                    break;
                }
            }

        } catch (SocketException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Scanner;

public class Send implements  Runnable{

    private int num1;
    private int num2;

    public Send(int num1,int num2) {
        this.num1=num1;
        this.num2=num2;
    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
        try {
//          Calendar rightnow=Calendar.getInstance();
//          SimpleDateFormat format=new SimpleDateFormat("yyyy年MM月dd日    HH:mm:ss");
//          String time=format.format(rightnow.getTime());

            DatagramSocket send = new DatagramSocket();
            Scanner scanner = new Scanner(System.in);
//          System.out.println("你說:"+time);
//          String s = scanner.nextLine();
            // String s="201216310";
//          byte[] array = s.getBytes();
//          DatagramPacket packet = new DatagramPacket
//                  (array, array.length, InetAddress.getLocalHost(),
//                  this.num1);
//          System.out.println("開始發送");
//          send.send(packet);
            while (true) {
                Calendar rightnow=Calendar.getInstance();
                SimpleDateFormat format=new SimpleDateFormat("yyyy/MM/dd    HH:mm:ss");
                String time=format.format(rightnow.getTime());
                System.out.println(this.num2+"說:"+time);
                String s = scanner.nextLine();
                byte[] array = s.getBytes();
                DatagramPacket packet = new DatagramPacket
                        (array, array.length, InetAddress.getLocalHost(),
                        this.num1);
                System.out.println("開始發送");
                send.send(packet);
                if (s.equals("8888")) {
                    System.out.println("1通話結束");
                    send.close();
                    System.out.println("2通話結束");
                    break;
                }
            }

        } catch (SocketException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章