Java学习之路0803(URL、基于UDP的数据包网络通信)
2015-08-16 17:19
627 查看
基于UDP的网络通信是通过数据包进行数据传输,不需建立连接,不可靠
运行结果:
甲—-开始聊天
你说: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
/* * 用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(); } } }
相关文章推荐
- Java学习之路0802(网络通信)
- 网络编程笔记一:基础入门
- 《C和指针(Pointer on c)》 学习笔记(转自:http://dsqiu.iteye.com/blog/1687944)
- Android使用Universal-ImageLoader在ListView中加载网络图片简单示例
- 基础知识---计算机各层网络协议 (图)
- Http协议
- Android-通过网络获取xml文件使用pull解析得到服务器中的信息(新闻客户端)
- android图片网络异步加载显示
- 计算机网络---三次握手,四次释放
- devstack安装报错解决方法:Failure creating NET_ID for xxxxx (ml2+ovs网络模式)
- https原理
- 网络编程TCP(五)
- 3:虚幻引擎网络架构:GameInfo,PlayerMove
- openstack通过Network Namespace和iptables实现租户私有网络互访和L3路由功能
- svn网络服务器项目导入到Eclipse
- Android 媒体:网络视频播放器的基本设计
- 2:虚幻引擎网络架构:Replication
- 阻塞/非阻塞读写总结、tcp网络编程的本质、muduo::Buffer设计简介
- https://github.com/CocoaPods/CocoaPods/search?q=No+such+file+or+directory报错解决方案
- HttpServletRequest 相关的监听