黑马程序员-网络编程

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

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)。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值