1. java.net的api分类
处理url
处理主机名称和IP地址
处理tcp通信协议
处理udp通信协议
处理网络及权限
内容处理器 contentHandler
2. 基本的服务器流程
服务器端
1)建立 ServerSocket 调用accept 监听客户端
2)建立socket链接, 通过 InputStream和OutputStream进行通信
客户端
1)建立Socket(服务器主机名,端口)
2)和服务器通信
3)关闭socket
3. SMTP通信协议
电子邮件不是及时响应,实现方法就是spooling处理(暂存器),发信人:发信人界面——》发信人邮件服务器——》spooling——》收信人服务器——》收信人。
执行步骤(参考相关内容):SMTP程序一般为客户端
4. POP3通信协议
1)与服务器建立链接
2)进行身份验证
3)处理邮件事务(start list retrieve delete reset top等)
4)执行quit指令,结束连接前更新服务器
5. 服务器端的FTP通信协议
FTP 通过在服务器和客户端建立两个链接,一个以端口21作为通信链接,一个接收到传输指令建立,实现客户端发送指令和服务器端响应结果
服务器端:
分为协议解释器和数据传输 DTP两个模块,前者建立服务器端socket 以侦听并接收客户端的链接请求,DTP专门处理FTP指令,并将执行结果和信息发到客户端
客户端:
分为协议解释器和数据传输过程及用户界面三个模块,协议解释器用来和数据库建立链接,DTP将FTP指令发送往客户单,并接收服务器端的响应;用户界面提供用户与协议解释器的交互接口
FTP传输步骤:
1)建立socket链接,使用21端口
2)进行用户验证
3)登陆成功后,就可以输入FTP指令到客户端,如输入get<文件名>
4)发送quit指令结束FTP链接
注意事项
1)处理多人链接(多线程) concurrent的线程池
2)FTPClient可执行相应的指令函数获得结果
6. HTTP协议
特点:
另一种C/S应用,属于无状态链接,解决方法是cookie和session
处理流程:
1) 建立http通信链接,如http://www.baidu.com
2) 浏览器将网址转换为http头 传送到web服务器处理
3) web服务器处理传递的http方法,客户端资源是否存在,并回写到客户端
4)请求处理后,web服务器终止链接
7. 聊天程序
服务器
利用serversocket产生socket,以等待用户的链接,并接收来自用户端的信息,并将其传给其他客户端,实现:
1)使用hashmap记录链接的客户端
2)当发送数据时,通过socket获得对应的 outData, 通过outData.writeUTF 发送数据
3)中断连接时,先通过 remove删除hashmap中数据,再关闭client
客户端
利用socket和服务器建立链接,实现基本类似于sokcet客户端,使用readUTF和writeUTF 接收和发送信息
8. 网络游戏
服务器端:
多人连线;处理各种预先定义好的指令与游戏逻辑; 将信息发送到所有链接的客户端(逻辑因游戏而定)
客户端:
用户接口处理(鼠标支持,信息显示等),游戏逻辑
关系:
图形等在客户端显示,服务器负责传递对手的信息,客户端接收信息,并在本地做相应改变
9. JSSE和HTTPS服务器
SSL提供 数据加密、数据签名(fingerprint和秘钥信息)、建立安全连接
JSSE:
java中支持SSL和TLS通信安全的API包,提供了数据加密、客户端身份认证、服务器端身份认证和消息完整性功能,如:
1)建立服务器和客户端的secure socket: SSLServerSocket SSLSocket SSLServerSocketFactory SSLSocketFactory
2)处理SSL连接的session
3)处理客户端和服务器端的ssl handshake程序
4)处理数字签名的证书验证 DSA RSA: cert包
服务器端
1)建立服务器端 secure socket SSLServerSocketFactory ssf=SSLServerSocketFactory.getDefault(); ssf.createServerSocket();
2)接收客户端socket serversocket.accept
3)服务器接收并发送信息
4)服务器关闭连接
客户端
1)建立服务器端socket
2)发送和接收信息
3)关闭
Https服务器程序:
1)设置 security provider security.provider.3=com.sun.net.ssl.internal.ssl.provider
2)取得公钥 keystore.get
3)设置公钥属性 命令行或程序中设定
4)编写服务器和客户端程序
多线程实现
使用 java的concurrent 库,参考