在网络环境下,不同主机在互联网中使用ip地址来进行标识,在网络协议中使用端口号来标识主机上的不同进程,为了唯一标识网络中通信的一个进程(即通信的某一方)就要了解:本地协议,本地ip地址,本地端口号。
Tips:1.端口号范围是0~65535
2.Tcp支持的应用协议主要有Telnet.FTP.SMTP等,UDP支持的应用层协议主要有NFS(网络文件系统),SNMP(简单网络管理协议),DNS(主域名称系统),TFTP(通用文件传输协议)等。
l URL编程
一:URL的组成
Protocol://resouceName:port/resourcename#anchor
协议名:指明获取资源所使用的传输协议,如HTTP,FTP,Gopher,File等
端口号:可选,表示连接的端口号,如默认将连接到协议默认的端口
资源名:是资源的完整地址,包括主机名,端口号,文件名或文件内部的一个引用。
标记:可选,指文件内的有特定标记的位置
二:URL类
为表示URL,Java.net中实现了URL类,可通过下面的构造方法来初始化一个URL对象。
(1)public URL(String spec);//通过一个表示URL地址的字符串可以构造一个URL对象,如:URL urlbase=new URL(“http://www.163.com/”)
(2)public URL(URL context,String spec);//通过基URL构造一个URL对象,如:
URL com163=new URL(“http://www.163.com/”)
URL index163=new URL(com163,”index.html”)
(3)public URL(String protocol,String host,String file);//通过协议,域名及文件名构造一个url对象,如:
URL gamelan=new URL(“http”,”www.gamelan.com”,”/pages/Gamelan.net.html”);
(4)public URL(String protocol,String host,int port,String file);//通过协议,域名,端口号及文件名构造一个url对象,如: URL gamelan=new URL(“http”,”www.gamelan.com”,80,”/pages/Gamelan.net.html”);
注意:类URL的构造方法都可能会抛出异常,因此生成URL对象时,必须要对这个Exception进行处理,通常使用try catch语句进行捕获,格式如下:
Try{
URL myurl=new URL(...);
}catch(Malformed URLException e){
...
}
一个URL对象生成后,其属性不能被改变,但是可以通过URL类所提供的方法来获取这些属性。
URL类部分方法
方法 | 说明 |
String getPotocol() | 获取该URL的协议名 |
String getHost() | 获取该URL的主机名 |
Int getPort() | 获取该URL的端口号,如果没有设置端口,返回-1 |
String getFile() | 获取该URL的文件名,如果没有返回空串 |
String getRef() | 获取该URL中记录的引用,如果URL不含引用,返回null |
String getQuery() | 获取该URL的查询信息 |
String getPath() | 获取该URL的路径 |
String getAuthority() | 获取该URL的权限信息 |
String getUserInfo() | 获得使用者的信息 |
三:从URL读取万维网资源
得到一个URL对象后,便可通过它读取指定的WWW资源,这时使用URL的方法如下:
InputStream openStream()
方法openStream()与指定的URL建立连接并返回InputStream类的对象以从这一连接中读取数据,便可显示指定URL地址网页的HTML代码,但虽然控制台会显示指定网址的HTML代码,但中文部分却以乱码显示,这是因为网址的网页是以某种指定的中文编码方式进行编码的,而读取的时候却没有指定相应的编码方式,因而中文部分就可能出现乱码。
四:网络编程的乱码问题
编码方式是指网络资源特别是网页上的文字内容需要依据某种字符集来编译成机器能够识别和存储传输的二进制机器码,字符集是多个字符的集合,字符集种类较多,每个字符集包括的字符个数不同,常见的字符集名称有ASCLII字符集,UTF-8字符集,GB2312字符集(国家标准汉字编码字符集,中英文均采用双字节),GBK字符集(兼容GB2312字符集,GB2312字符集包含7000多个汉字和字符,GBK包含21000多个),以及GB18030字符集,Unicode字符集等
五:利用URLConnection实现双向通信
通过URL的方法openStream(),只能从网络上读取数据,如果同时还想输出数据,例如,向服务器端的CGI程序发送一些数据,必须先与URL建立连接,然后才能对其进行读写,这时就要用到类URLConnection了,CGI是公共网关接口的简称,它是用户浏览器和服务器端应用程序进行连接的接口。
类URLConnection也在包Java.net中定义,它表示Java程序和URL在网络上的通信连接,当与一个URL建立连接时,首先要在一个URL对象上通过方法openConnection()生成对应的URLConnection对象,如果连接过程失败,将产生IOException,类URLConnection的使用方法如下:
建立连接:URL url=new URL(“HTTP://www.yahoo.com”);
URLConnection con=url.openConnection();
向服务器端发送数据:
PrintStream ps=new PrintStream(con.getOutputStream());
从服务器读数据:
DataInputStream dis=new DataInputStream(con.getInputStream());
dis.readLine();