黑马程序员——29,网络编程UDP

 ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

 黑马程序员——29,网络编程UDP

一:网络传输---->

       网络传输一般是先找到IP地址然后把数据发送到对方指定的应用程序上,网络应用程序都用数字进行标示,就是逻辑端口。通信规则就是协议,国际组织通信规则是TCP/IP。网络参考模型如图1所示。


                    图1

        数据传输的时候都是从应用层开始往下推进,每过一层都会被数据封包,再经过传输线路传输到对方的主机上,再从物理层往上层层递进,每过一层都会被数据拆包,最后获得数据。

         前期学习编程都是在传输层和网际层编程。后期做java开发则是在应用层编程。传输层最常见协议是TCP和UDP,网际层常见协议就是IP。应用层http协议。

二:网络通信三要素---->

1,  IP地址:网络设备标示,本地循环地址127.0.0.1主机名localhost,IP地址是IP使用的32位或128位无符号数字,低级协议,TCP和UDP都是基于它建立而成的。

2,  端口号:标示进程的逻辑地址,0到65535,其中0到1024系统使用或者保留端口。

3,  传输协议:常见的TCP/UDP

Java.net包就是关于网络编程的数据包。

IP地址常用InetAddress类来表示,InetAddress常用的方法:

package momo;
import java.net.*;
public class Wuo
{
 
         publicstatic void main(String[] args)throws Exception
         {
        InetAddress  ia=InetAddress.getLocalHost();//获取本地地址                                      
        String    sAddress=     ia.getHostAddress();//获取IP号 
        String   sName=ia.getHostName();//获取IP名
        sop("sName----"+sName); //sName----PYDAVFTNLUJKQQD
        sop("sAddress----"+sAddress);//sAddress----192.168.1.2
       
        //用getByName方法获取任意一台主机IP地址
        InetAddress   iaget  =InetAddress.getByName("192.168.1.9");
        String  sdizhi=iaget.getHostAddress();
        String  smingzi=iaget.getHostName();
        sop(smingzi);//192.168.1.9
        //找不到名字就返回IP地址号
        sop(sdizhi);//192.168.1.9
        InetAddress  iabaidu=InetAddress.getByName("www.baidu.com");
        sop( iabaidu.getHostAddress());//180.97.33.107
        sop(iabaidu.getHostName());//www.baidu.com
        //因为百度网有多态主机所以返回的IP地址不唯一
        
         }
         public  static void  sop(Object  obj)//打印方法
         {
                   System.out.println(obj);
         }
 
}

三:TCP与UDP-->

UDP:1,将数据,源,目的封装到数据包中。

             2,  不需要建立连接,速度快。

             3,数据包限制在64k。

             4,不可靠协议。

TCP:1,必须建立连接形成数据通道,效率比较低

             2,大量数据传输

            3,  通过三次握手协议完成连接,(客户端:你好。服务端:已收到,你好。客户端:已收到。)可靠协议。

UDP传输:

UDP传输编程步骤:

1,  建立DatagramSocket端点,最好写上端口号

2,  定义数据包,发送端的数据包往标记需要传输的数据和IP地址和端口,接收端的数据包要设定好接收的数组大小。

3,  发送端发送send,接收端接收receive

4,  调用数据包的相关方法获取数据

5,  关闭资源close() 

 

//发送端
public static  void  fsd() throws  Exception
{
           //发送端
           //建立DatagramSocket端点
           DatagramSocket    ds= new  DatagramSocket(10011);
           //定义数据包
           byte[]   by="我是超人".getBytes();
           DatagramPacket dgp=new  DatagramPacket(by,by.length,InetAddress.getByName("192.168.1.2"),10012);
           //发送数据包
           ds.send(dgp);
           //关闭资源
           ds.close();                          
}
//接收端
public  static  void  jsd()throws Exception
{
           //建立DatagramSocket端点
           DatagramSocket   ds=new DatagramSocket(10012);
           //定义数据包
           byte[]   by=new byte[1024];
           DatagramPacket   dgp=new DatagramPacket(by,by.length);
           //接收数据
           ds.receive(dgp);
           //调用数据包相关方法读取数据
           InetAddress    ia=   dgp.getAddress();//获取地址
           String      sAddress=    ia.getHostAddress();//获取地址号
           String      sName=       ia.getHostName();  //获取地址名
           int  i=dgp.getPort();//获取端口号
           sop(sName+"----"+sAddress+"----"+i);
           //关闭资源
           ds.close();
          
}

其中sop是打印方法:

public static  void    sop(Object obj)//打印方法
{
           System.out.println(obj);
}

 

通过键盘读取数据再进行UDP发送,这里就用到了流,所以要导入io包。

import java.net.*;
import java.io.*;
 class Wuo
{
    //发送端     
    publicstatic void main(String[] args) throws  Exception
    {
                   //建立端点
        DatagramSocket   ds=new  DatagramSocket(10011);
     
        //获取键盘数据的读取流
        BufferedReader   bur=new  BufferedReader(new  InputStreamReader(System.in));    
        String   s=null;
        while((s=bur.readLine())!=null)//不断的读取数据
        {
           if(s.equals("over"))//停止读取数据
           {
             break;      
           }
           byte[]   by=s.getBytes();
           //定义数据包
           DatagramPacket   dgp=new DatagramPacket(by,by.length,InetAddress.getByName("192.168.1.2"),10012);
          //192.168.1.255是广播地址,向这个地址发数据可以发到该网络中的所有主机
          //192.168.1.0表示一个网络地址段
         //发送数据
        ds.send(dgp);        
       }
    //关闭资源
   ds.close();
   }
 
}    

    

        所以,利用UDP再配合上多线程,还可以编写一个简陋的聊天程序。(需要注意的是要保持接收端的开启,才能够保持实时接收到对方的数据。)UDP传输也是经常用在视频会谈上。

 

  

  ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值