您的位置:首页 > 理论基础 > 计算机网络

java基础整理12--网络编程

2011-04-14 13:05 323 查看
网络编程的基础知识:
IP地址和Port(端口号)
本地回路的IP地址:127.0.0.1
端口号的范围为0~65535之间,0~1023之间的端口数是用于一些知名的网络服务和应用。

UDP与TCP:
TCP,传输控制协议(Transmission Control Protocol),是面向连接的通信协议。
UDP,用户数据报协议(User Datagram Protocol),是无连接通信协议。

Socket:
Socket是网络驱动层提供给应用程序编程的接口和一种机制。
可以把Socket比喻成是一个港口码头。应用程序只要把货物放到港口码头上,就算完成了货物的运送。应用程序只需等待货物到达码头后,将货物取走。
Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IP和Port。

Java中的网络编程类:
位于java.net包中。
DatagramSocket类用于UDP通信。
ServerSocket类用于TCP通信的服务器端。
Socket类用于TCP通信的服务器和客户端。

UDP网络程序:
DatagramSocket类:
构造函数:
public DatagramSocket()
public DatagramSocket(int port)
public DatagramSocket(int port,InetAddress laddr)
Close方法:
send(DatagramPacket p)方法
receive(DatagramPacket p)方法

DatagramPacket类:
如果把DatagramSocket比作创建的港口码头,那么DatagramPacket就是发送和接收数据的集装箱。
构造函数:
public DatagramPacket(byte[] buf,int length)
public DatagramPacket(byte[] buf,int length,InetAddress address,int port)
getInetAddress和getPort方法
getData和getLength方法

InetAddress类:
InetAddress是用于计算机IP地址的一个类,而在日常应用中的计算机地址是用“192.168.0.1”、“www.it315.org”等字符串格式来表示的。
getByName方法
getHostAddress方法

最简单的UDP程序:
字符串与字节数组之间的双向转换。
UDP接收程序必须先启动运行,才能接收UDP发送程序发送的数据。
用start命令来打开新命令行窗口的好处。
解决发送中文字符串的问题。

TCP服务器程序模型的编写要点:
TCP服务器程序要想能够接收多个客户端连接,需要循环调用ServerSocket.accept方法。
服务器程序与每个客户端连接的会话过程不能互相影响,需要在独立的线程中运行。
一个线程服务对象与一个服务器端Socket对象相关联,共同来完成与一个客户端的会话。

如何检测和解决端口冲突问题:
使用netstat命令查看当前正在被使用的TCP端口号。
通过一个配置参数来指定TCP服务程序所使用的端口号。
将用户所指定的端口号保存到一个文件中,当服务器程序下次启动运行时,直接从文件中读取那个端口号。

TCP客户端程序:
编程实例:编写一个与上面的服务器程序通信的客户端程序。
要点:连接服务器的IP地址和端口号不要固定编写在程序代码中,而是通过程序的运行时参数来指定,以提供较好的灵活性和较高的通用性。

在TCP网络连接上传递对象:
ObjectInputStream和ObjectOutputStream可以从底层输入流中读取对象类型的数据和将对象类型的数据写入到底层输出流。
使用ObjectInputStream和ObjectOutputStream来包装底层网络字节流,TCP服务器和TCP客户端之间就可以传递对象类型的数据。

URL(Uniform Resource Locator统一资源定位符):
URL的基本组成:协议、主机名、端口名、资源名。
例如:http://www.it315.org:8080/index.html
相对URL,例如"/a.html"、"./a.html"、"../../a.html"、"a.html"。

URL编码规则:
将空格转化为加号(+)。
对0~9,a-z,A-Z之间的字符保持不变。
对于所有其他的字符,用这个字符的当前字符集编码在内存中的十六进制格式表示,并在每个字节前加上一个百分号(%)。如字符“+”用%2B表示,字符“=”用%3D表示,字符“&”用%26表示,每个中文字符在内存中占用两个字节,字符“中”用%D6%D0表示,字符“国”用%B9%FA表示。
对于空格也可以直接使用其十六进制编码方式,即用%20表示,而不是将它转换成加号(+)。
java.net包中提供了URLEncoder和URLDecoder这两个类,来实现URL编码和解码。

了解几个HTTP消息头:

Connection:
用于指定处理完本次请求/响应后,客户端与服务器是否继续保持连接。设置值可以为Keep-Alive和close。
Accept-Language
用于指出客户机期望服务器返回的文档所使用的国家语言,可以指定多个以逗号分隔的国家语言。
Content-Length:
用于表示实体内容的长度(字节数)
Range:
用于指定服务器只需返回文档中的部分内容及内容范围,有以下几种使用格式:
1)Range:bytes=100-599
2)Range:bytes=100-
3)Range:bytes=-100
Content-Range:
用于指定服务器返回的部分实体内容的位置信息,
例如,Content-Range:bytes 2543-4532/7898

URL类:
构造函数(都可以引发MalformedURLException异常):
public URL(String spec)
public URL(String protocol,String host,int port,String file)
public URL(String protocol,String host,int port,String file,URLStreamHandler handler)
public URL(URL context,String spec)
getProtocol、getHost、getPort、getFile等方法。
openConnection方法返回URLConnection对象。

工厂设计模式:
URL类的setURLStreamHandlerFactory(URLStreamHandlerFactory fac)静态方法。
StreamHandlerFactory类的createURLStreamHandler(String protocol)方法。

URLConnection与HttpURLConnection类:
URLConnection与HttpURLConnection的作用。
URLConnection的连续过程。
setRequestProperty方法。
getHeaderFields方法。
getInputStream和getOutputStream方法。
getHeaderField、getContentLength、getContentEncoding、getContentType等方法。
一个HTTP连接可以被多个HttpURLConnection实例对象共享,调用HttpURLConnection的disconnect方法可以关闭底层共享网络。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: