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

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

一:网络传输---->

网络传输一般是先找到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传输也是经常用在视频会谈上。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-27 03:48:21

黑马程序员——29,网络编程UDP的相关文章

黑马程序员_Java网络编程

1,IP地址和InetAddress IP地址是互联网上每台计算机都有的自己的标记,IP地址分为5类,A类保留给政府,B类给中等规模的公司,C类给任何需要的人,D类用于组播,E类用于实验. A类  1.0.0.1-126.255.255.254  B类  128.0.0.1-191.255.255.254   C类  192.0.0.1-223.255.255.254  D类 244.0.0.1-239.255.255.254 E类 240.0.0.1-255.255.255.254 在以后开发

黑马程序员__GUI_网络编程

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- GUI 1.事件处理就是处理用户的一个操作这个事件,在事件发生的时候程序应做出什么反应.当事件发生在哪个组件上, 哪个组件就可以说是事件源.给事件源添加一个监听器对象,监听器对象中包含若干事件处理方法.如果事件发生了, 事件处理方法就会自

黑马程序员_JAVASE_网络编程上

网络模型: OSI模型 TCP/IP模型 网络通信要素 ip地址 端口 通信协议 通信过程 1.找到对方IP地址 2.数据要发送到对方指定的应用程序上,为了标识这些应用程序,用唯一的数字进行标识,这些数字符号就是端口 3.定义通信规则,tcp还是udp还是其他 应用层协议 http,ftp,smtp 解析主机地址: InetAddress ia = InetAddress.getByName("www.baidu.com"); String ip = ia.getHostName();

黑马程序员-Java 网络编程

--Java培训.Android培训.iOS培训..Net培训.期待与您交流!-- 一.概要 学习网络编程需要向对网络模型有一定的了解,主要需要了解的网络模型有OSI参考模型和TCP/IP参考模型,现在TCP/IP模型应用最为广泛,网络编程一般都是针对TCP/IP协议参考模型的编程.但是作为学习时,OSI的学习也是必不可少的,OSI分为七层协议,分别是:物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.TCP/IP模型只有四层,分别是:网络访问层.互联网层.传输层和应用层.接下来要学习

黑马程序员------Java网络编程学习总结

Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! 网络模型: OSI参考模型 TCP/IP参考模型 网络参考模型图 网络通讯的要素: IP地址:InetAddress 网络中设备的标识 不容易记忆,可以用主机名 本地回环地址:127.0.0.1:主机名:localhost 端口号 用于标识进程的逻辑地址,不同进程的标识 有效端口:0~65535,其中0~1024为系统使用端口或保留端口 网络协议  是一种网络通讯的规则  常见协议:TCP,UDP UDP: 1

黑马程序员_网络编程

IP地址 1.IP地址的分类 A类1.0.0.0到126.0.0.0 B类128.1.0.0到191.254.0.0 C类192.0.1.0到223.255.254.0 D类224.0.0.0到239.255.255.255 E类240.0.0.0到255.255.255.254 局域网内的IP 192.168开头 本地回环地址:127.0.0.1.本机的IP地址,只要网卡工作正常,127.0.0.1 2.java.net.InetAddress 描述IP地址对象的类,没有构造方法 InetAd

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

网络编程 网络模型 通讯要素:InetAddress(对象):ip地址,网络中设备的标识,不可记忆,可用主机名,本地回环地址:127.0.0.1主机名localhost 端口号 传输协议:UDP,将数据的源及目的封装成数据包中,不需要建立连接,每个数据包的大小限制在64K内,无连接,是不可靠协议,不需要建立连接,速度快.力求速度,不求数据的准确性.比如聊天软件,网络会议. TCP:建立连接,形成传输数据的通道,在连接中进行大数据量传输,通过三次握手完成连接,是可靠协议,必须建立连接效率稍低. S

黑马程序员 ---------- Java网络技术之 ---正则表达式 (Day06)

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- 正则表达式 正则表达式:基本知识 1  字符,   2 字符类 , 3 预定义字符类 , 4 边界匹配器 ,5 Greedy 数量词,6 Logical 运算符 详解: 1 字符 x   字符 x \\ 反斜线字符 \0n 带有八进制值 0 的字符 n (0 <= n <= 7) \0nn 带有八进制值 0 的字符 nn (0 <= n

黑马程序员【网络编程之UDP协议】

UDP协议 UDP(User Datagram Protocol)也就是用户数据报协议,是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范. 提到无连接数据传输,那我们首先想到的就是不可靠,数据丢失等等,那么在我们的日常软件中,UDP协议到底都应用在什么场景上呢?举一个大家比较熟悉的例子,就是我们平时所用的聊天软件,因为我们的聊天软件所传输的数据并非是重要数据. 通过ip和端口号,我们可以实现一个小的聊天软件,有兴趣的朋友可以在局域网内通过