从这篇文章开始我们学习一下关于java中设计到的网络编程。 Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket。像大家熟悉的QQ、MSN都使用了Socket相关的技术。下面就让我们一起揭开Socket的神秘面纱。 网络基础知识关于网络相关的一些基础(比如ip地址,mac地址的概念,以及tcp/udp的一些协议包的概念)这里就不在赘述,如果有不懂的请查看相关资料 TCP/IP协议:是目前世界上应用最为广泛的协议,是以TCP和IP为基础的不同层次上多个协议的集合,也成TCP/IP协议族、或TCP/IP协议栈 TCP:TransmissionControlProtocol传输控制协议 IP:InternetProtocol互联网协议 TCP/IP五层模型应用层:HTTP、FTP、SMTP、Telnet等传输层:TCP/IP网络层:数据链路层:物理层:网线、双绞线、网卡等 注意: 如果有过网络相关知识的可能这种层次划分并不对,但是都习惯性的这种划分而已IP地址 为实现网络中不同计算机之间的通信,每台计算机都必须有一个唯一的标识—-IP地址。32位二进制 端口区分一台主机的多个不同应用程序,端口号范围为0-,其中0-位为系统保留。如:HTTP:80FTP:21Telnet:23 IP地址+端口号组成了所谓的Socket,Socket是网络上运行的程序之间双向通信链路的终结点,是TCP和UDP的基础 Socket套接字网络上具有唯一标识的IP地址和端口组合在一起才能构成唯一能识别的标识符套接字。Socket原理机制:通信的两端都有Socket网络通信其实就是Socket间的通信数据在两个Socket间通过IO传输 Java中的网络支持针对网络通信的不同层次,Java提供了不同的API,其提供的网络功能有四大类: InetAddress:用于标识网络上的硬件资源,主要是IP地址 URL:统一资源定位符,通过URL可以直接读取或写入网络上的数据 Sockets:使用TCP协议实现的网络通信Socket相关的类 Datagram:使用UDP协议,将数据保存在用户数据报中,通过网络进行通信。 InetAddressInetAddress类用于标识网络上的硬件资源,标识互联网协议(IP)地址 //获取本机的InetAddress实例InetAddressaddress=InetAddress.getLocalHost();address.getHostName();//获取计算机名address.getHostAddress();//获取IP地址byte[]bytes=address.getAddress();//获取字节数组形式的IP地址,以点分隔的四部分//获取其他主机的InetAddress实例InetAddressaddress2=InetAddress.getByName("其他主机名");InetAddressaddress3=InetAddress.getByName("IP地址"); 我们来简单看一下怎么用 package //url代表一个绝对地址,URL对象直接指向这个资源,如: URLurll=newURL(" URLurl=newURL(" URLlib=newURL(urll,"library/library.jsp");(3)URL(Stringprotocol,Stringhost,Stringfile) //其中,protocol代表通信协议,host代表主机名,file代表文件名。如:newURL(" URLlib=newURL(" getFile():获得URL指定资源的完整文件名。 getHost():返回主机名。 getPath():返回指定资源的文件目录和文件名。 getPort():返回端口号,默认为-1。 getProtocol():返回表示URL中协议的字符串对象。 getRef():返回URL中的HTML文档标记,即#号标记。 getUserInfo:返回用户信息。 toString:返回完整的URL字符串。internet寻址 java.net包可以用32位int形式来操作32位的IP地址(即Internet主机地址)。类InetAddress实际上是可以把Internet地址换算成代表该地址的对象。Java就是靠这个类来显示Internet地址已经相关信息的。 InetAddress有以下常用方法: getAddress():返回IP地址的字节形式。 getAllByName():返回指定主机名的IP地址。 getbyAddress():返回指定字节数组的IP地址形式。 getByName():返回指定主机名的IP地址对象。 getHostAddress():返回主机地址的字符串形式。 getLocalHost():返回当前主机名。 hastCode():返回InetAddress对象的哈希码。 toString:返回地址转换成的字符串。使用URL读取网页内容 通过URL对象的openStream()方法可以得到指定资源的输入流,通过流能够读取或访问网页上的资源 //使用URL读取网页内容//创建一个URL实例URLurl=newURL("InputStreamis=url.openStream();//通过openStream方法获取资源的字节输入流InputStreamReaderisr=newInputStreamReader(is,"UTF-8");//将字节输入流转换为字符输入流,如果不指定编码,中文可能会出现乱码BufferedReaderbr=newBufferedReader(isr);//为字符输入流添加缓冲,提高读取效率Stringdata=br.readLine();//读取数据while(data!=null){System.out.println(data);//输出数据data=br.readerLine();}br.close();isr.colose();is.close() 在阅读过程中遇到问题,可以发送信息给白癜风治疗最佳医院哪个医院白癜风能治好
|