PS:本文是自己学习Java网络编程过程中记录的笔记,算是对学过的内容进行一下总结。
网络编程基础知识
URL(Uniform Resource Locater)统一资源定位符,表示网络中资源的位置。(可以是一个文件或目录,也可以是一个数据库)
URL常见格式如下:传输协议://主机名:端口号:文件名(例如——http://192.168.1.110:80/Index.html),其中参数的说明如下:
传输协议是指获取资源的方式,如http、ftp、tftp和telent等;
主机名可以是IP地址,也可以是主机域名;
端口号对应不同的网络服务(http协议默认的端口号是80);
文件名是资源文件的完整路径(相对于服务器所指定访问的默认根目录的相对路径)
关于文件路径的描述:假设某个文件的绝对路径为E:\Demo\Eclipse\NET\URL\URLdemo1\output.html,表示为"E:\\Demo\\Eclipse\\NET\\URL\\URLdemo1\\output.html",(转义字符)注意分隔符为"\\"(Windows)。注意Java所运行的平台,不同的系统(如Windows和Linux)分隔符不同,在Windows下为\,在Linux下为/。
Socket编程
Java支持基于流的通信(stream-basedcommunication)和基于包的通信(packet-basedcommunication)。基于流的通信使用TCP,基于包的通信使用UDP,java中通过创建套接字(socket)来进行网络通信。
服务器套接字(server socket)
下面的语句创建一个服务器套接字,并将它附加到一个端口上:
<span style="font-family:Courier New;font-size:14px;">ServerSocketserversocket = new ServerSocket(port);</span>
如果企图在已经使用的端口上创建服务器套接字,会导致java.net.BindException异常。
创建服务器套接字之后,服务器使用下面的语句监听连接:
<span style="font-family:Courier New;font-size:14px;">Socket socket =serversocket.accept();</span>
客户端套接字(socket)
客户端执行下面的语句,请求与服务器进行连接:
<span style="font-family:Courier New;font-size:14px;">Socketsocket = new Socket(serverName, port);</span>
上面的语句打开一个套接字,使客户端程序能够与服务器进行通信,其中serverName是服务器的主机名或IP地址。如果找不到指定的主机,Socket构造方法会抛出异常java.net.UnknownHostException。
通过套接字进行数据传输
通过调用套接字对象的 getInputStream() 和 getOutputStream() 方法,来获取输入/输出流。InputStream 流和 OutputStream 流用来读取或写入字节,可以使用DataInputStream、DataOutputStream、BufferedReader 和 PrintWriter 来包装 InputStream 和 OutputStream,以读取基本数据类型和字符串。
InetAddress类
InetAddress代表IP地址,它有两个子类:Inet4Address、Inet6Address,分别代表IPv4和IPv6地址。该类没有提供构造函数,只能通过它提供的两个静态方法来获取InetAddress实例。
<span style="font-family:Courier New;font-size:14px;">getByName(String host);//根据提供的主机名,获取对应的InetAddress实例
getByAddress(byte[] addr);//根据提供的IP地址,获取对应的InetAddress实例</span>
在服务器程序中使用 InetAddress 类来获取客户端的主机名和IP地址。在服务器程序中通过以下语句可以得到与客户端相连接的套接字的一个InetAddress实例:
<span style="font-family:Courier New;font-size:14px;">InetAddressinetAddress = socket.getInetAddress();</span>
还可以使用 InetAddress 类的静态方法 getByName() 通过主机名或IP地址创建一个 InetAddress 实例。
<span style="font-family:Courier New;font-size:14px;">InetAddressinetAddress = InetAddress.getByName(“Jack”);</span>
使用URLDecoder和URLEncoder
当URL地址里包含非西欧字符(比如中文字符)的字符串时,系统会将这些非西欧字符串转换application/x-www-form-urlencoded MIME字符串。
URLDecoder 类包含一个 decode(Strings, String enc) 静态方法,完成从 ...MIME 到普通字符串的转换。(解码)
URLEncoder 类包含一个 encode(Strings, String enc) 静态方法,完成从普通字符串到 ...MIME的转换。(编码)
MIME(MultipurposeInternet Mail Extensions)多用途互联网邮件扩展类型,是设定某种扩展名的文件用哪一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。