您的位置:首页 > 理论基础 > 计算机网络

Java学习之路0803(URL、基于UDP的数据包网络通信)

2015-08-16 17:19 627 查看
基于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();
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: