黑马程序员:udpsocket介绍:DatagramSocket、DatagramPacket
2013-11-15 15:10
555 查看
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
Socket
Socket就是为网络服务提供的一种机制
通信的两端都是Socket
网络通信其实就是Socket间的通信
数据在两个Socket间通过IO传输
DatagramSocket 类 建立udpsocket服务
DatagramPacket 类 定义数据包
方法:
InetAddress getAddress()
DatagramPacket(byte[] buf, int length, InetAddress address, int port)
构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
示例:
byte[] buf = "abc".getBytes();
DatagramPacket dp = DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.1"),10000);
若地址为192.168.1.255 这会在这个局域网中发广播,只要有客户端监听这10000端口号就能收到发出广播的信息
DatagramPacket(byte[] buf, int length)
构造 DatagramPacket,用来接收长度为 length 的数据包。
DatagramSocket方法:
发送方法 void send(DatagramPacket p)
接收方法 void receive(DatagramPacket p) 此方法是阻塞式
需求:通过UDP传输方式,将一段文字数据发送出去。
思路:
1,建立updsocket服务
2,提供数据,并将数据封装到数据包中
3,通过socket服务的发送功能,将数据包发出去。
4,关闭资源
代码演示:
需求:
定义一个应用程序,用于接收UDP协议传输的数据并处理
UDP协议接收端
思路:
1.定义udpsocket服务
2.定义一个数据包,用于存储接收到的数据包,并通过数据包对象对其进行操作
3.通过socket服务的receive方法将接收到的数据存入到已定义好的数据包中
4.通过数据包对象的特有功能,将这写不同的数据取出,并打印在控制台上。
5.关闭资源
代码演示:
练习:
通过多线程、键盘录入、Socket建立一个Chat程序
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
Socket
Socket就是为网络服务提供的一种机制
通信的两端都是Socket
网络通信其实就是Socket间的通信
数据在两个Socket间通过IO传输
DatagramSocket 类 建立udpsocket服务
DatagramPacket 类 定义数据包
方法:
InetAddress getAddress()
DatagramPacket(byte[] buf, int length, InetAddress address, int port)
构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
示例:
byte[] buf = "abc".getBytes();
DatagramPacket dp = DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.1"),10000);
若地址为192.168.1.255 这会在这个局域网中发广播,只要有客户端监听这10000端口号就能收到发出广播的信息
DatagramPacket(byte[] buf, int length)
构造 DatagramPacket,用来接收长度为 length 的数据包。
DatagramSocket方法:
发送方法 void send(DatagramPacket p)
接收方法 void receive(DatagramPacket p) 此方法是阻塞式
需求:通过UDP传输方式,将一段文字数据发送出去。
思路:
1,建立updsocket服务
2,提供数据,并将数据封装到数据包中
3,通过socket服务的发送功能,将数据包发出去。
4,关闭资源
代码演示:
class UdpSent { public static void main(String[] args) throws Exception { DatagramSocket ds = new DatagramSocket(8888); //指定端口8888,可以不写 byte[] buf = "i am data".getBytes(); DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.2.100"),10000);//把buf中的数据发送到IP为192.168.2.100主机的10000端口号上去 ds.send(dp); ds.close(); } }
需求:
定义一个应用程序,用于接收UDP协议传输的数据并处理
UDP协议接收端
思路:
1.定义udpsocket服务
2.定义一个数据包,用于存储接收到的数据包,并通过数据包对象对其进行操作
3.通过socket服务的receive方法将接收到的数据存入到已定义好的数据包中
4.通过数据包对象的特有功能,将这写不同的数据取出,并打印在控制台上。
5.关闭资源
代码演示:
class UdpReceive { public static void main(String[] args) throws Exception { DatagramSocket ds = new DatagramSocket(10000); //接收端的端口为10000,当发送端发送到该主机且端口是10000的时候这个程序就会接收 //UDP的一个数据包最大为64K字节,若byte[]为1024,而数据包超过1024的时,超过部分会被截断 byte[] buf = new byte[1024*64]; DatagramPacket dp = new DatagramPacket(buf,buf.length); ds.reveice(dp); //获取发送端IP String ip = dp.getAddress().getHostAddress(); //获取接收到的数据 String data = new String(dp.getData(),0,dp.getLength()); //getData()返回的是byte[],取数组中接收到的数据转换为字符串,dp.getLength()为接收到数据的长度 //获取端口号 int port = dp.getPort(); System.out.println(ip+"~~"+data+"~~"+port); ds.close(); } }
练习:
通过多线程、键盘录入、Socket建立一个Chat程序
/* * 练习: * 通过多线程、键盘录入、Socket建立一个Chat程序 * 思路: * 1.通一个进程中同时需要发送和接收信息,所以需要用到多线程 * 2.一个线程负责发送信息,一个线程负责接收信息 */ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; public class UdpChat { public static void main(String[] args) { // TODO Auto-generated method stub try { //DatagramSocket send = new DatagramSocket(); DatagramSocket receive = new DatagramSocket(10002); new Thread(new Send(receive)).start(); new Thread(new Receive(receive)).start(); } catch (SocketException se) { throw new RuntimeException("建立数据包套接字失败"); } } } //TODO Send class Send implements Runnable { private DatagramSocket ds; Send(DatagramSocket ds) { this.ds = ds; } public void run() { try { BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in)); String line = null; while ((line=bfr.readLine())!=null) { if(line.equals("over")) break; byte[] buf = line.getBytes(); DatagramPacket dp = new DatagramPacket(buf,buf.length, InetAddress.getByName("192.168.2.100"),10001); ds.send(dp); //System.out.println(line.toUpperCase()); } bfr.close(); ds.close(); } catch (IOException e) { throw new RuntimeException("发送失败"); } } } //TODO RECEIVE class Receive implements Runnable { private DatagramSocket ds; Receive(DatagramSocket ds) { this.ds = ds; } public void run() { try { while(true) { //System.out.println("jieshou"); 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); } } catch(IOException e) { throw new RuntimeException("接收失败"); } } }
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net
相关文章推荐
- 黑马程序员_网络编程一(IP,TCP和UDP, DatagramSocket与DatagramPacket,TCP传输)
- 黑马程序员_网络编程1(IP,TCP和UDP,DatagramSocket与DatagramPacket,TCP传输)
- 在Java中实现UDP协议编程(DatagramSocket/DatagramPacket)
- 网络编程一(IP,TCP和UDP, DatagramSocket与DatagramPacket,TCP传输)
- 黑马程序员--10.网络编程--03.【UDP协议相关类】【DatagramPacket类】【DatagramSocket类】【UDP发送端和接收端】
- java.net.DatagramPacket/java.net.DatagramSocket-UDP Socket编程
- (99)网络编程:IP地址类、DatagramSocket(UDP)、DatagramPacket
- 基于java的Udp探索,DatagramSocket ,DatagramPacket
- java.net.DatagramPacket/java.net.DatagramSocket-UDP Socket编程
- Java学习之UDP--DatagramSocket和DatagramPacket
- java之UDP(datagramsocket,datagramPacket)实例
- 在Java中实现UDP协议编程(DatagramSocket/DatagramPacket)
- 黑马程序员--Java网络编程(InetAddress、DatagramSocket、DatagramPacket)
- JAVA与网络开发(TCP:Socket、ServerSocket;UDP:DatagramSocket、DatagramPacket;多线程的C/S通讯、RMI开发概述)
- java点滴之操纵UDP的类:DatagramSocket和DatagramPacket
- Java.UDP.DatagramSocket-DatagramPacket
- Java.UDP-TCP-DatagramSocket-DatagramPacket-InetAddress-ServerSocket-Socket
- 应用程序开发——网络编程(InetAddress、TCP、UDP、Socket与ServerSocket、DatagramPacket与DatagramSocket、URL)
- JAVA与网络开发(TCP:Socket、ServerSocket;UDP:DatagramSocket、DatagramPacket;多线程的C/S通讯、RMI开发概述)
- 网路编程-UDP-DatagramSocket、DatagramPacket ||LocalServerSocket和LocalSocket