网络编程

来源:互联网 发布:程序高级算法 编辑:程序博客网 时间:2024/06/05 01:00

 

网络编程的基础知识:

网络协议与TCP/IP

IP地址和Port(端口号)

本回路的ip地址:127.0.0.1

端口号的范围为0-65535之间,0-1023是用于一些知名的网络服务和应用。

 

UDP与TCP

TCP(Transmission Connection Protocol)传输控制协议,是面向连接的通信协议。

UDP(User Datagram Protocol),是无连接通信协议。

Socket
Socket是网络驱动层提供给应用程序变成的接口和一种机制。
可以把Socket比喻成是一个港口码头。应用程序只要把货物放到码头,就算完成了货物的运送。应用程序只需要等待货物到达码头后,将货物取走。Socket在应用程序中创建,通过一种绑定机制于驱动程序建立关系,告诉自己所对应的ip和Port。
Socket数据发送过程:
1、应用程序产生Socket 
2、同时调用bind将Socket的信息通知给驱动程序
3、应用程序将要发送的数据传给Socket
4、驱动程序从Socket取出数据并通过网卡发送出去。
Socket数据接收过程:
1、应用程序产生Socket
2、同时调用bind将Socket的信息通知给驱动程序
3、驱动程序根据从网卡传工来的数据报中的指定目标端口号将处理后的数据传送到相应的Socket中,
4、应用程序从Socket中取数据
java中的网络编程类,位于java.net包中。
DatagramSocket类用于UDP通信。
ServerSocket类用于TCP通信的服务器端。
Socket类用于TCP通信的服务器和客户端。
UDP网络程序
DatagramScoket类  DatagramPacket类  InetAddress类  DatagramSocket类
构造函数有:public DatagramSocket() 主动给对方发送数据,不接受对方发送的数据,自动分配端口
public DatagramSocket(int port) 有可能先接受数据,自己指定端口号
public DatagramSocket(int port,InetAddress ddr)在多个IP地址上运行,明确指定发送接收的IP地址
 
send(DatagramPacket p)发送UDP数据包
close()不使用关闭,释放对象。
DatagramPacket类
DatagramPacket就如同码头的发送和接收数据的集装箱。
其构造函数有:public DatagramPacket(byte[] buf,int length)(用于创建接收数据的包)、public DatagramPack(byte[] buf,int length,InetAddress address,int port)(用于发送数据的包,必须要指定对方的地址和端口号)
其中有getInetAddress和getPort方法以及getData和getLength方法。
TCP网络程序 
工作原理:
tcp客户端程序与服务器端程序交互过程:
1、服务器程序创建一个ServerSocket,然后调用accept方法等待客户来连接。
2、客户端程序创建一个Socket并请求与服务器建立连接。
3、服务器收到客户的连接请求,并创建一个新的Socket与该客户建立专线连接。
4、建立连接的两个Socket在一个单独的线程(右服务器程序创建)上对话。
在TCP网络连接上传递对象
ObjectInputStrea和ObjectOutputStream可以从底层输入流中读取对象类型的数据和将对象类型的数据写入高底层输出流中.
使用ObjectInputStrea和ObjectOutputStream来包准感底层网络字节流,TCP服务器和TCP客户端之间可以传递对象类型的数据.
访问Internet网络资源
URL(Uniform Resource Locator)
基本组成: 协议、主机名、端口号、资源名。例如http://www.itcast.cn:8080/index.html
相对URL,例如”/a.html"
URL编码规则:
将空格转化为加号。对字母数字保持不变。对于其它字符则是用这个字符在内存中的十六制表示,并在没各字节前加%,如字符“+”用%28表示。中文字符在内存中占用两个字节,字符“中”用%D6%D0表示。空格也可以用%20表示。
http协议的会话过程:
基于http1.0协议
客户机和服务器建立连接后,客户机向服务器发送请求,服务器接到请求后向客户机回送响应信息后关闭连接
基于http1.1协议
客户机和服务器建立连接后,客户机向服务器发送请求信息,服务器接到请求后向客户机回送响应信息,这个期间客户机可以发送n次请求同时服务器向应请求,客户机发出关闭连接才结束回话连接。
如何检测和解决端口冲突问题 
1、使用netstat命令查看当前正在被使用的TCP端口号。(netstat -na) 
2、通过一个配制参数来指定TCP服务程序所使用的端口。 
3、将用户指定的端口号保存到一个文件中,当服务器程序下次启动运行时,直接从文件中读取那个端口号。 
在TCP网络连接上传递对象 
1、ObjectInputStream和ObjectOutputStream可以从底层输入流中读取对象类型的数据和将对象数据写入到底层输出流。 
2、ObjectInputstream和ObjectOutputstream来包装底层网络字节流,TCP服务器和TCP客户端之间就可以传递对象类型的数据。 
3、编程实例:(通过网络传输Java对象) 
访问Internet网络资源 
java.net包中还有URL、URLDecoder、URLEncoder、URLConnection、HttpURLConnection等类。 
URL(Uniform Resure Locator统一资源定位符) 
1、URL的基本组成:协议、主机名、端口号、资源名。 
2、URL编码规则: 
   将空格转换为加号(+)。 
   对0~9,a~z,A~Z之间的字符保持不变。 
   对于所其它的字符,有这个字符的当前字符集编码在内存中的十六进制 
   格式表示,并在每个字节前加上一个百分号(%)。如字符“+”用%2B表示 
   ,字符“=”用%3D表示,字符“&”用%26表示,每个中文字符在内存中占两个 
   字节,字符“中”用%D6%D0表示,字符“国”用%B9%FA表示。 
3、java.net包中提供了URLEncoder和URLecoder这两个类,来实现URL编码和解码。 

HTTP协议 
TTTP协议的会话过程 
基于HTTP 1.0协议的客户机与服务器的信息交换过程(客户机--建立连接--发送请求信息——》服务器--发出响应信息--关闭连接--》客户机); 
基于HTTP 1.1协议的客户机与服务器的信息交换过程(客户机--建立连接--发出第1~n次连接-》服务器--发出第1~n次连接--关闭连接--》客户机); 
HTTP请求消息 一个完整的请求消息包括:一个请求行、若干消息头、以及实体内容。 
一个完整的响应消息包括:一个状态行、若干消息头、以及体内容。 
几个HTTP消息头 
1、Connection  用于指定处理完本次请求/响应后,客户端与服务器是否继续保持连接,设置值可以为keep-Alive和close. 
2、Accept-Language 用于指定客户机期望服务器返回的文档所使用的语言,可以指定多个以逗号分隔的国家语言。 
3、Content-Length 用于表示实体内容的长度(字节数)。 
4、Range 用于指定服务器只需返回文档中的部分内容及内容范围,有以下几种使用格式: 
    Range:bytes=100-599 
    Range:bytes=100- 
    Range:bytes=-100 
5、Content-Range 用于指定服务器返回的部分实体内容的位置信息,例如:Content-Range:bytes 2543-4531/7898 
telnet www.g.cn 80 
GET / HTTP/1.1 
Hosst: 
Accept-Language: zh-cn 

URL类 
构造函数(都可能引发MalformedURLException异常): 
URL(String spec) 根据 String 表示形式创建 URL 对象。 
URL(String protocol, String host, int port, String file) 根据指定 protocol、host、port 号和 file 创建 URL 对象。 
URL(String protocol, String host, int port, String file, URLStreamHandler handler) 根据指定的 protocol、host、port 号、file 和 handler 创建 URL 对象。 
URL(String protocol, String host, String file) 根据指定的 protocol 名称、host 名称和 file 名称创建 URL。 
URL(URL context, String spec) 通过在指定的上下文中对给定的 spec 进行解析创建 URL。 
URL(URL context, String spec, URLStreamHandler handler) 通过在指定的上下文中用指定的处理程序对给定的 spec 进行解析来创建 URL。 

工厂设计模式 
URL类的setURLStreamHandlerFactory(URLStreamHandlerFactory fac)设置应用程序的 URLStreamHandlerFactory。在一个给定的 Java 虚拟机中,此方法最多只能调用一次。 
URLStreamHandlerFactory类的createURLStreamHandler(String protocol) 创建具有指定协议的新 URLStreamHandler 实例。 

URLConnetion和HttpURLConnetin类 
通过在 URL 上调用 openConnection 方法创建连接对象。 
处理设置参数和一般请求属性。 
使用 connect 方法建立到远程对象的实际连接。 
远程对象变为可用。远程对象的头字段和内容变为可访问。 
setRequestProperty(String key, String value) 设置一般请求属性。 
getHeaderFields() 返回头字段的不可修改的 Map。 
getInputStream() 和 getOutputStream() 返回从此打开的连接读取的输入出流 
getHeaderField(int n) 返回第 n 个头字段的值。 
getHeaderField(String name) 返回指定的头字段的值。 
getContentLength() 返回 content-length 头字段的值。 
getContentEncoding() 返回 content-encoding 头字段的值。 
getContentType() 返回 content-type 头字段的值。 
一个HTTP连接可以被多个HttpUPLConnection实例对象共享,调用HttpURLConnection的disconnect方法可以关闭底层共享网络。

原创粉丝点击