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();
        }
    }

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