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

黑马程序员——Java网络编程之UDP传输

2014-05-16 06:19 507 查看
android培训、java培训、期待与您交流!

网络编程

网络模型



通讯要素:InetAddress(对象):ip地址,网络中设备的标识,不可记忆,可用主机名,本地回环地址:127.0.0.1主机名localhost
端口号
传输协议:UDP,将数据的源及目的封装成数据包中,不需要建立连接,每个数据包的大小限制在64K内,无连接,是不可靠协议,不需要建立连接,速度快。力求速度,不求数据的准确性。比如聊天软件,网络会议。
TCP:建立连接,形成传输数据的通道,在连接中进行大数据量传输,通过三次握手完成连接,是可靠协议,必须建立连接效率稍低。
Socket
Socket就是为网络服务提供的一种机制,通信的两端都要有Socket。网络间的通信其实就是Socket间的通信,网络通信就是两个Socket间通过I/O传输。
UDP传输:DatagramSocket和DatagramPacket根据包中的信息从一台机器投递到另一台机器。凡是带端口的都是用来构造发送数据包的。写Socket要理解流程。
[align=left]class Send implements Runnable{[/align]
[align=left] //1.通过DatagramSocket,建立 Scoket端点[/align]
[align=left]private DatagramSocket s ;[/align]
[align=left]public Send( DatagramSocket s){[/align]
[align=left] this. s= s;[/align]
[align=left]}[/align]
[align=left] public void run() {[/align]
[align=left] //获取控制台数据[/align]
[align=left] BufferedReader buffreader =new BufferedReader(new InputStreamReader(System.in)) ;[/align]
[align=left] String str ;[/align]
[align=left] byte[] buff =new byte[ 1024];[/align]
[align=left] try {[/align]
[align=left] while((str =buffreader .readLine ())!= null){[/align]
[align=left] if("886" .equals (str))[/align]
[align=left] break;[/align]
[align=left] buff =str .getBytes ();[/align]
[align=left] //2.将数据通过DatagramPacket将数据封装成数据包,要包含数据,目标IP和目标端口[/align]
[align=left] DatagramPacket data=[/align]
[align=left] new DatagramPacket( buff, buff.length,InetAddress.getByName("127.0.0.1") ,10071 );[/align]
[align=left] //3.调用Socket的send方法,发送数据。[/align]
[align=left] s. send(data );[/align]
[align=left] s. close();[/align]
[align=left] } [/align]
[align=left] } catch (Exception e ) {[/align]
[align=left] // TODO: handle exception[/align]
[align=left] throw new RuntimeException("chulibuliao" );[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left]}[/align]
[align=left]class Rece implements Runnable{[/align]
[align=left] //1.通过DatagramSocket建立Soket服务。接收端建立Socket服务的时候一般要监听一个端口。[/align]
[align=left] private DatagramSocket s ;[/align]
[align=left] public Rece( DatagramSocket s){[/align]
[align=left] this. s= s;[/align]
[align=left] }[/align]
[align=left] public void run() {[/align]
[align=left] // TODO Auto-generated method stub[/align]
[align=left] try {[/align]
[align=left] while ( true){[/align]
[align=left] //2.定义数据包,用来接受源传送过来的数据包[/align]
[align=left] byte[] buff =new byte[ 1024];[/align]
[align=left] DatagramPacket dp=new DatagramPacket(buff, buff.length) ;[/align]
[align=left] //3.接收源的数据包,装入预先定义好的数据包[/align]
[align=left] s. receive(dp );[/align]
[align=left] //4.将不同的数据和信息分别取出[/align]
[align=left] String ip=dp.getAddress() .getHostAddress ();[/align]
[align=left] String data=new String(dp.getData() ,0 ,dp .getLength ());[/align]
[align=left] System .out.println( ip+ ">>>"+data );[/align]
[align=left] s. close();[/align]
[align=left] }[/align]
[align=left] } catch (Exception e ) {[/align]
[align=left] // TODO: handle exception[/align]
[align=left] throw new RuntimeException("shicu" );[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left]public class WeChat {[/align]
[align=left] [/align]
[align=left] public static void main (String[] args) throws Exception {[/align]
[align=left] // TODO Auto-generated method stub[/align]
[align=left]DatagramSocket sendSocket=new DatagramSocket();[/align]
[align=left]DatagramSocket receSocket=new DatagramSocket(10071 ); //接收端需要监听窗口[/align]
[align=left]new Thread( new Send( sendSocket)).start() ;[/align]
[align=left]new Thread( new Rece( receSocket)).start() ;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left]}[/align]

                   android培训、java培训、期待与您交流!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: