标签:
先说一下关于InetAddress类,用一个小例子:
import java.net.InetAddress; import java.net.UnknownHostException; public class IPDemo { public static void main(String[] args) throws UnknownHostException { // InetAddress i = InetAddress.getLocalHost();获取本地信息 // System.out.println(i); InetAddress i = InetAddress.getByName("www.baidu.com"); System.out.println(i.getHostAddress()); System.out.println(i.getHostName()); } }
UDP是一种面向无连接的传输方式,传输速度快,但是每次传输的大小不能超过64K
怎样来编写UDP?
发送数据步骤:
1.创建socket服务
2.创建数据包
3.将数据封装到数据包中,添加ip和端口以及数据
4.发送
5.关闭资源
接收数据步骤:
1.创建socket服务,并监听端口
2.创建数据包,用来接收数据
3.用socket接收数据到数据包中
4.从数据包中取出数据
5.关闭资源
下面用代码演示:
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; class UdpSend{ //1.创建socket服务 //2.传输数据,并打包 //3.发送 //4.关闭资源 public static void main(String[] args) throws Exception { //1.创建socket服务 DatagramSocket socket = new DatagramSocket(10000);//指定发送器端口 //2.传输数据,并打包 byte[] buf = "udp hello".getBytes(); DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getByName("localhost"), 8888);//指定应用程序端口 //发送 socket.send(packet); //关闭资源 socket.close(); System.out.println("over"); } } /* * 1.创建服务socket,并监听端口 * 2.定义一个数据包,用来接受数据包 * 3.用socket服务接受的数据保存到,数据包中 * 4.取出数据 * 5.关闭资源 */ class UdpRece{ public static void main(String[] args) throws Exception { DatagramSocket ds = new DatagramSocket(8888);//指定应用程序的端口 byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf, buf.length); ds.receive(dp); String ip = dp.getAddress().getHostAddress(); int port = dp.getPort(); String data = new String(dp.getData(),0,dp.getLength()); System.out.println(ip+":"+port+":"+data); ds.close(); } } public class UdpDemo { public static void main(String[] args) { } }
上面传送一次数据,下面写一个增强版的。
import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; class Send{ public static void main(String[] args) throws Exception { DatagramSocket socket = new DatagramSocket(); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String line =null; while((line = reader.readLine())!=null){ if("886".equals(line)){ break; } byte[] buf = line.getBytes(); DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),8888); socket.send(dp); } reader.close(); socket.close(); } } class Rece{ @SuppressWarnings("resource") public static void main(String[] args) throws Exception { DatagramSocket socket = new DatagramSocket(8888); while(true){ byte[] buf = new byte[1024]; DatagramPacket dp =new DatagramPacket(buf, buf.length); socket.receive(dp); String data = new String(dp.getData(),0,dp.getLength()); String ip = dp.getAddress().getHostAddress(); int port = dp.getPort(); System.out.println(ip+":"+port+":"+data); } } } public class UdpDemo2 { public static void main(String[] args) { } }
总结:其实java中将网络传输的部件,都封装成对象,非常方便使用,在网络编程中主要是记住步骤。
标签:
原文地址:http://www.cnblogs.com/lzeffort/p/4714873.html