网络编程的基础知识
-网络协议与TCP/IP
-IP地址和Port(端口号)
-本地回路的IP地址:127.0.0.1
-端口号的范围为0~65535之间,0~1023之间的端口数是用于一些知名的网络服务和应用。
-UDP和TCP
-TCP,传输控制协议,是面向连接的通信协议。
-UDP,用户数据报协议,是无连接通信协议。
Socket
-Socket是网络驱动层提供给应用程序编程的接口和一种机制。
-Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IP和Port。
Java中的网络编程类
-位于java.net包中
-DatagramSocket类用于UDP通信。
-ServerSocket类用于TCP通信的服务器。
-Socket类用于TCP通信的服务器和客户端。
****************************************************************************************
UDP网络程序
-DatagramSocket类(数据码头)
-DatagramPacket类(数据集装箱)
-InetAddress类(IP地址类)
-最简单的UDP程序
-字符串与字节数组之间的双向转换。
-UDP接收程序必须先启动运行,才能接收UDP发送程序发送的数据
-用start命令来打开新命令行窗口的好处
-解决发送中文字符串的问题
-用UDP编写网络聊天程序
-多线程、GUI、网路集合编程
-分为三个步骤来完成:
1、编写图形用户界面;
2、编写网络消息发送功能;
3、编写网络消息接收功能。
-私有IP通过网关代理上网的原理。
****************************************************************************************
TCP网络程序
-TCP网络程序的工作原理
-TCP客户端程序与TCP服务器端程序的交互过程:
(1)服务器程序创建一个ServerSocket,然后调用accept方法等待客户来连接。
(2)客户端程序创建一个Socket并请求与服务器建立连接。
(3)服务器接收客户的连接请求,并创建一个新的Socket与该客户建立专线连接。
(4)建立了连接的两个Socket在一个单独的线程(由服务器进城创建)上对话。
(5)服务器开始等待新的连接请求,当新的连接请求到达时,重复步骤(2)到步骤(5)的过程。
-ServerSocket类
-构造函数
-close方法
-accept方法
-Socket类
-构造函数
-getInputStream和getOutputStream方法
-简单的TCP服务器程序
如程序TcpServer
-完善的TCP服务器程序模型
如程序ReverseServer(TCP服务器程序)
编写要点:
-TCP服务器程序要想能接收多个客户端连接,需要循环调用ServerSocket.accept方法;
-服务器程序与每个客户端连接的会话过程不能互相影响,需要在独立的线程中运行;
-一个线程服务对象与一个服务器端Socket对象相关联,共同来完成与一个客户端的会话。
-TCP客户端程序
如程序TcpClient(TCP客户端程序)
-如何检测和解决端口冲突问题
--使用netstat -na命令来查看当前正在被使用的TCP端口号。
--通过一个配置参数来指定TCP服务程序所使用的端口号。
--将用户所指定的端口号保存到一个文件中,当服务器程序下次启动运行时,直接从文件中读取那个端口号。
-通过TCP程序在网络上传递对象
--ObjectInputStream和ObjectOutputStream可以从底层输入流中读取对象类型的数据和将对象类型的数据写入到底层输出流。
--使用ObjectInputStream和ObjectOutputStream来包装底层网络字节流,TCP服务器和TCP客户端之间就可以传递对象类型的数据。
--编程实例:通过网络传输Java对象。
问题:怎样理解应用程序协议和网络通讯协议的关系。
应用程序协议ftp/http/pop3/smtp建立在网络通讯协议tcp之上的有具体语义的应用。
问题:怎样区分ASP、JSP、PHP与网络编程的概念
ASP、JSP、PHP是用于组织网站内容的脚步语言,而不是用于编写网络程序的。
****************************************************************************************
访问Internet网络资源
java.net包中还有URL、URLDecoder、URLEncoder、URLConnecion、HttpURLConnection等类。
-URL(统一资源定位符)
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协议
会话过程,如图
HTTP请求消息,如图
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-4532/7898
-URL类
多种构造函数(都可引发MalformedURLException异常)
getProtocol/getHost/getPort/getFile等方法
openConnection方法返回URLConnection对象
-工厂设计模式
URL类的setURLStreamHandlerFactory(URLStreamHandlerFactory fac)静态方法。
URLStreamHandlerFactory类的createURLStreamHandler(String protocol)方法。(URLStreamHandler是一个接口,创建的返回值是它的实现类对象)
-URLConnection和HttpURLConnection类
URLConnection和HttpURLConnection的作用。
setRequestProperty方法。
connect方法(连接)。
getHeaderFields方法。
getInputStream和getOutputStream方法
getHeaderField、getContentLength、getContentEncoding、getContentType等方法。
一个HTTP连接可以被多个HttpURLConnection实例对象共享,调用HttpURLConnection的disconnect方法可以关闭底层共享网络。
编程实例:将访问www.google.com站点的HTTP请求消息的Accept-Language头分别设置成日文和中文后,然后打印出www.google.com站点返回的所有响应消息头和网页内容。