网络编程
CS应用程序:双端 要通过网络编程 实现信息在双端间互通
网络通讯协议:
一套标准 是网络信息互通的基础
UDP协议:无连接通讯协议 数据发送端和接收端不建立逻辑连接 安全性低 有可能导致信息的损失 优势:消耗资源少 传输效率快 一般用于音频 视频 例如视频会议的信息传输
TCP/IP协议:安全性高 传输数据更完整
有三次握手机制 拥有面向连接的特性 能够保证数据的安全性
第一次握手:客户端向服务器端发送请求 等待服务器端响应
第二次握手:服务端回写信息给客户端 通知客户端服务器已经收到消息
第三次握手:客户端向服务器端发送请求连接
以上三次握手成功后 才真正建立连接 可以进行数据的传递
一定由客户端发送第一次请求
服务器端做的事情永远只有一件:监听端口号 一旦接收到某个客户发送请求 则对应的获取其socket对象
后续 服务器都可以利用这个socket对象向这个客户端发送信息
(服务器端一定要先启动)
网络编程三要素:
协议:
IP地址:
IPv4:一个32位的二进制数 分为四个字节 其中每个字节都是0-255之间的十进制整数 组合排列后可以表示42亿个标识
IPv6:采用128位地址长度 每16个字节一组 分为8组十六进制
AB43:AF65:AB76:AC65:AB43:AF65:AB76:AC65
端口号:
使用端口号来标记服务 取值范围0-65535 自定义的服务可以使用大于1024的端口号
Server:服务器端
//1.创建设定服务器对象 主要是设定端口号
ServerSocket server = new ServerSocket(9999);
//2.监听端口号 一旦接受到客户端请求 此方法会触发返回与这个客户端的socket对象
Socket socket = server.accept();
//3.通过socket对象 获取对应的读入写出流
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
//4.关闭socket对象
socket.close();
Client:客户端
//1.创建socket对象 参数指明向哪一台电脑上的哪一个端口(服务)发送请求
Socket socket = new Socket(“127.0.0.1”,9999);
//2.通过socket对象 获取对应的读入写出流
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
//3.关闭socket对象
socket.close();
案例:信息互通
服务器端持续开启的循环
ServerSocket server = new ServerSocket(9999);
while(true) {
//2.监听端口号 一旦接受到客户端请求 此方法会触发返回与这个客户端的socket对象
Socket socket = server.accept();
…
}
读入操作不能正常退出—》因为在写出的时候没有标记结束
无论在客户端还是服务器端 写出完毕后添加结束标记
OutputStream os = socket.getOutputStream();
os.write(“向服务端发送请求”.getBytes());
//标记写出内容已经完结
socket.shutdownOutput();