zoukankan      html  css  js  c++  java
  • 黑马程序员-网络编程

    UDP:

    • 面向无连接,
    • 每个数据大小限制在64K内
    • 因为面向无连接,所以就是不可靠协议。
    • 将数据和源和谜底封装到数据包当中,不需要建立连接。速度快(就像送快递一样,管你在不可以先到你门口)

    用处:聊天,视屏会议,桌面共享视频传输等等。

    TCP:用打电话来举例一下。

    • 建立传输数据,形成传输数据的通讯。
    • 在链接中进行大量数据的传输
    • 通过三次握手完成链接,是可靠的协议
    • 必须建立连接

    用处:下载,浏览器发送请求道服务器,一样。


    Socket理解

    • Scoket就是为网络服务提供一种机制。
    • 通讯的两端都有Socket.
    • 网络通信其实就是Socket间的通信。
    • 数据在两个Socket间通过IO传输

    特点每一传输协议的Socket是不一样的。

    UDP:用的是DatagramSocket

     UDPSocket简单的聊天程序

    思路:(发送端)

    1.既然需要聊天。就应该怎么建立聊天程序,,DatagramSocket对象http://www.w3cschool.cc/manual/jdk1.6/

    DatagramSocket dgSocket = new DatagramSocket();
    

     

    2.那么发给谁?怎么打包数据。DatagramPacket。

    代码如下DatagramPacket对象API文档链接http://www.w3cschool.cc/manual/jdk1.6/

    //创建数据包
                byte[] buf = str.getBytes();
    //并通过构造函数,制定发送的地址,和端口,字节数据包
                DatagramPacket dPacket = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.100"),3536)
    

     3.发送。

    dgSocket.send(dPacket);
    

     4.关闭连接

    br.close();
    

     写完发送端。那么我就应该写接收端了

    思路

    思路:接收端

    1.建立连接 相应的端口

    2.接受,缓存保存。

    3.处理

    4.关闭

    具体代码:和发送很是相同

    //1.创建套接字  .. 设置相应的程序端口。和发送端指定的端口要相同,这样就能和要聊天。
            DatagramSocket dsSocket = new DatagramSocket(3536);
            System.out.println("开始聊天");
            String str =null; //记录用户的输入
            //用来接收好友反复发来的消息
            while(str=="88")
            {
                //2.创建数据包接受数据
                byte[] rec = new byte[1024];        
                DatagramPacket dPacket = new DatagramPacket(rec,rec.length);
                dsSocket.receive(dPacket);
                str = new String(dPacket.getData(),0,dPacket.getLength());    
                int poit = dPacket.getPort();    
                
                //打印看看
                System.out.println("你的消息:"+str+"------------------端口号"+poit);
                
            }
            //4.关闭
            dsSocket.close();
    复制代码

    下面我们来说一下TCP的客服端和服务端的聊天程序的写法

    就是一个客服端(Socket)和服务器(ServerSocket)端的链接间。我的理解是一个服务端可以链接多个客服端。

    在客服端有输入流outPutStream. 用于发送数据

    在服务器端有输出流。inputStream. 用于接受数据。

    其他的我觉得多写几次就能够理解了。

    客服端Socket

    package Text;
    
    import java.io.OutputStream;
    import java.net.InetAddress;
    import java.net.Socket;
    
    public class Soc
    {
        public static void main(String[] args)throws Exception
        {
            
             //发送端的链接    
            Socket s = new Socket(InetAddress.getByName("192.168.1.100"),10010); 
            //给一个输入流
            
            OutputStream out = s.getOutputStream();
            
            //写入到输出流里面去。
            out.write("我在想你是不是笨蛋呢?".getBytes());
            s.close();
        }
    }
    

    下面是我服务端的写法:

    package Text;
    
    import java.io.InputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    
    public class socSev
    {
        //TCP服务端
        //1.建立一个服务端的socket服务。并且监听相应的端口
        //2.然后获取到客服端的对象 。 accept();
        //4.然后读取相应的数据
        public static void main(String[] args) throws Exception
        {
            //创建服务器端的套接字
            ServerSocket ss = new ServerSocket(10010);
            Socket s = ss.accept();//获取客服端的套接字
            
            
            //获取客服端的ip地址
            String ip = s.getInetAddress().getHostAddress();
            System.out.println(ip+"链接中................");
            //获取输入字节流
            InputStream input = s.getInputStream();
            byte[] buf = new byte[1024];
            //读取数据
            int i=input.read(buf);
            System.out.println(new String(buf,0,i));
            
            //关闭连接
            s.close();
            ss.close();
        }
    }
    

      


    DNS(Domain Name System,域名系统),

    因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。在RFC文档中RFC 2181对DNS有规范说明,RFC 2136对DNS的动态更新进行说明,RFC 2308对DNS查询的反向缓存进行说明。

    说明:在你通过网址访问的时候。是要通过域名访问你相应的主机,那么就要通过解析把你的域名导向你的主机。

    解析记录详解:今天在对域名解析的时候发现解析域名自己迷迷糊糊的,就这样做了一解释。

    A记录:将域名指向一个IPv4地址(例如:10.10.10.10),需要增加A记录CNAME记录:如果将域名指向一个域名,实现与被指向域名相同的访问效果,需要增加CNAME记录MX记录:建立电子邮箱服务,将指向邮件服务器地址,需要设置MX记录NS记录:域名解析服务器记录,如果要将子域名指定某个域名服务器来解析,需要设置NS记录TXT记录:可任意填写(可为空),通常用做SPF记录(反垃圾邮件)使用AAAA记录:将主机名(或域名)指向一个IPv6地址(例如:ff03:0:0:0:0:0:0:c1),需要添加AAAA记录SRV记录:记录了哪台计算机提供了哪个服务。格式为:服务的名字.协议的类型(例如:_example-server._tcp)显性URL:将域名指向一个http(s)协议地址,访问域名时,自动跳转至目标地址(例如:将www.net.cn显性转发到www.hichina.com后,访问www.net.cn时,地址栏显示的地址为:www.hichina.com)。隐性URL:与显性URL类似,但隐性转发会隐藏真实的目标地址(例如:将www.net.cn隐性转发到www.hichina.com后,访问www.net.cn时,地址栏显示的地址仍然为:www.net.cn)。
  • 相关阅读:
    ios中地图
    ios中地图定位
    ios中文件下载(带缓存)
    ios中tableview网封装(viewcontroller封装)常用的
    ipad开发小结
    ios tableview分组
    los中预览文件
    ios中一级导航
    ios中封装九宫格的使用(二级导航)
    ios中自定义button
  • 原文地址:https://www.cnblogs.com/ganwei/p/4571859.html
Copyright © 2011-2022 走看看