关闭

java网络编程----TCP UDP

标签: 网络编程 NIO TCP UDP Soc
166人阅读 评论(0) 收藏 举报

InetAddress:

获取InetAddress的方式:

getByName(String name)       如果是主机名,必须正确

getByAddress(byte[] addr) 格式要正确

getByAddress(String host,byte[] addr)     addr格式必须正确

getAllByName(String host)      如果是主机名,必须正确

getLocalHost()

 

当时ip地址构成的InetAddress时,getAddressgetHostAddress不会请求DNS,但是getHostNamegetCanonicalHostName()需要请求;同理,当为域名构建的InetAddress,在构建时就会请求DNS服务器,同时把address请求下来。所以所有的都不会再请求DNS

 

getHostName();      如果没有主机名则返回ip四段格式字符串

getCanonicalHostName()   同上,不过第一次获取时都是请求DNS

getAddress()--byte[]   通过这个可以判断时ipv4还是ipv6

getHostAddress       返回ip地址的字符串

 

  测试可达:

即是否可以建立网络连接。

isReachable(int timeout)

isReachable(NetworkInterface interface,int ttl,int timeo)

 

子类:Inet4AddressInet6Address

NetworkInterface

网络接口

获取方法:getByName

  getByInetAddress

          getInetAddresses   枚举

每个网络接口可能对应多个ip

URLURI

URL(Uniform Resource Locators)

URI(Uniform Resource Identifier)

URN(Uniform Resource Name)

URL是最常见的URIURI可以由资源的网络位置来标识资源,也可以由资源的名字、编号或其他特性来标识。

URL

既能标识资源,又能获取资源。

获取方法:URL(String url)

          URL(String protocol,String hostname,String file)

  URL(String protocol,String host,int port,String file)

     URL(URL base,String relative)

会检查协议是否存在,如果不正确,抛异常

 

获取数据:

InputStream openStream()

URLConnection openConnection()

URLConnection openConnection(Proxy proxy)

Object getContent()

Object getContent(Class[] classes)

 

openStream()

完成必要的握手,返回一个流,不包含任何首部或协议相关信息

openConnection()

为指定的URL打开一个socket返回URLConnection,这个URLConnection对象表示一个网络资源的打开的连接。可以通过这个对象进行读或者写。

getContent()

如果URL指示某种文本,返回的对象是某种InputStream,如果指示的是一个图像,返回一个ImageProducer.这两种不同的类有一个共同点,他们本身并不是数据对象,而是一种途径,程序可以通过他们构造数据对象。

 

 

URL重写了equalshashCode方法。

当且仅当两个URL指向相同的资源,有相同的片段标识符和查询字符串,才会认为这两个URL是相等的。而且equals会尝试用DNS解析主机,来判断两个主机是否相同,所以会阻塞。

 

toURI()方法

 

URI

toURL()

equals方法不是阻塞的。uri会转义,比较前不解析。

toString()是没有编码的时候的。

toASCIIString()是编码后的。

 

URLEncoderURLDecoder

由于在url中会出现在不同系统中有歧义的字符,所以对于这些字符需要转义,但是URL类不自动编码或解码。

HTTP

包括 首部行,首部,消息体

超文本传输协议,定义了客户端和服务器端通信的标准,是一种数据格式。顶一个web客户端如何与服务器对话,以及数据如何从服务器传回客户端

200 成功,300重定向 400 客户端错误  500 服务器端错误

 

Socket

连接远程机器,发送数据,接受数据,关闭连接,绑定端口,监听入站数据,在绑定端口上接受来自远程机器的连接。

客户端Socket

程序用构造函数创建一个新的Socket,

Socket尝试连接远程主机

 

一旦建立连接,本地和远程主机就从这个socket得到输入流和输出流。全双工的。

 

Socket s=new Socket(“www.baidu.com”,21);

这不只是创建一个Socket,同时会建立网络连接。有可能连接失败抛异常的

 

socket.getInputstream()

socket.getOutputstream()

 

 

 

服务端Socket

 

ServerSocket

ServerSocket server=new ServerSocket(13)

Socket connection=server.accept();

 

 

UDP Socket

DatagramPacket

DatagramSocket   客户端和服务端都是用这个

datagram

 

 

 

NIO

参考:http://ju.outofmemory.cn/entry/6835

传统的服务器端:

 

一个socket连接对应一个输入输出通道,一个输入输出通道对应一个线程,这样cpu负担比较高。

 

 

所以我们能看出不必像原先那样开大量的线程,然后让线程傻傻的等待。而NIO不必,通道已经由一个线程建立好了,有事就说话,说了就去做,而且在一个线程中建立了多个通道,可以同时做很多事情,不会像原先那样开辟多个线程,耗费CPU资源,关系是1对多的。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:20037次
    • 积分:751
    • 等级:
    • 排名:千里之外
    • 原创:52篇
    • 转载:28篇
    • 译文:0篇
    • 评论:7条
    文章分类
    最新评论