黑马程序员—网络编程之UDP

发布时间:2016-12-11 12:22:42 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"黑马程序员—网络编程之UDP",主要涉及到黑马程序员—网络编程之UDP方面的内容,对于黑马程序员—网络编程之UDP感兴趣的同学可以参考一下。

网络通讯三个要素: 1,IP地址:InetAddress,网络中设备的标识,也可用与其对应的主机名代替。 本地默认回环地址:127.0.0.1 主机名:localhost 2,端口:用于标识进程的逻辑地址,不同进程的标识不同。 有效端口:0~65535,其中0~1024为系统使用或者保留。 3,传输协议:通讯的规则。 常见协议:TCP、UDP。 UDP传输协议的特点: 1,面向无连接 2,需要将传输的数据打包,大小不能超过64k以内 3,因为无连接,所以是不可靠协议 4,不需要建立连接,速度快 用java进行网络编程的话,就必须要了解一个重要的概念:Socket 1,socket就是为网络提供的一种机制 2,通信的两端都有socket 3,网络通信其实就是socket间的通信 4,数据在两个 socket间通过IO传输 UDP传输的Socket服务 1,DategramSocket与DatagramPacket 2,建立发送端,接收端 4,调用Socket的发送接收方法 5,关闭Socket 其中发送端和接收端是两个独立的运行程序 一个简单的获取ip和主机名的程序: 简单的UDP协议的网络传输: 定义一个UDP的传输,可以将键盘录入发送给接收方: 一个简单的聊天程序,使用多线程实现的网络编程: /* 编写一个聊天程序,有收数据部分和发数据的部分。 这两部分需要同时执行, 那就需要用到多线程技术。 一个线程控制收,一个线程控制发。 因为收和发动作是不一致的,所以要定义两个run方法, 而且这两个方法要封装到不同的类中。 */ import java.net.*; import java.io.*; class Send implements Runnable { private DatagramSocket ds; public Send(DatagramSocket ds) { this.ds = ds; } public void run() { try { BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); String line = null; while((line=bufr.readLine())!=null) { if("886".equals(line)) break; byte[] buf = line.getBytes(); DatagramPacket dp= new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.255"),10002); ds.send(dp); } } catch(Exception e) { throw new RuntimeException("发送端失败"); } } } class Receive implements Runnable { private DatagramSocket ds; public Receive(DatagramSocket ds) { this.ds = ds; } public void run() { try { while(true) { byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf,buf.length); ds.receive(dp); String ip = dp.getAddress().getHostAddress(); String data = new String(dp.getData(),0,dp.getLength()); System.out.println(ip+"::"+data); } } catch(Exception e) { throw new RuntimeException("接收失败"); } } } class ChatDemo { public static void main(String[] args) throws Exception { DatagramSocket sendSocket = new DatagramSocket(); DatagramSocket receiveSocket = new DatagramSocket(10002); new Thread(new Send(sendSocket)).start(); new Thread(new Receive(receiveSocket)).start(); } }

上一篇:java反射
下一篇:二分法

相关文章

相关评论