Java 之 网络编程
1.OSI模型
a.全称:开放系统互联
b.七层模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
c.注意:OSI模型 是所谓的 理论标准
2.TCP/IP模型
a.四层模型:应用层、传输层、网络互联层、网络接口层
应用层——对应OSI模型中的 应用层、表示层、会话层
传输层——对应OSI模型中的 传输层
网络互联层——对应OSI模型中的 网络层
网络接口层——对应OSI模型中的 数据链路层、物理层
b.特点:①TCP是一种安全的协议,但速度没有UDP快
②TCP有三次握手机制,保证传输的安全性
③http、smtp、soap、ftp 底层指定使用TCP,被称为 TCP/IP协议簇
c.端口号:端口号只能为 0~65535,注意前1024不准使用
tel:23 smtp:25 ftp:21 http:80
3.Socket类
a.客户端——消息的发起方
①得到要发送的消息,可以接收外部输入
String msg = new Scanner(System.in).next();
②得到Socket对象
Socket sc = null; sc = new Socket("127.0.0.1",9527); //传IP地址与端口号
③把消息交给Socket对象——由于是发送,所以方向是输出流;发送内容可以是文本也可以是二进制数据,所以它提供的是字节流——综上,一定是OutputStream
OutputStream out = sc.getOutputStream(); //方法一 out.write(msg.getBytes()); out.flush(); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(sc.getOutputStream())); //方法二 bw.write(msg); bw.flush();
④在finally块中关闭通道
if(sc != null){ try { sc.close(); } catch (IOException e) { e.printStackTrace(); } }
b.服务端
①创建服务器监听器
ServerSocket server = null; server = new ServerSocket(9527);
②开始监听
while(true){ Socket socket = server.accept(); //accept会进入阻塞状态,一旦有消息发送过来,就返回Socket对象 //④开启子线程进行消息处理 new ProcessThread(socket); }
③在finally块中关闭通道
if(server != null){ try { server.close(); } catch (IOException e) { e.printStackTrace(); } }
④在子线程中,从Socket的InputStream取数据
public void run() { BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(socket.getInputStream())); String msg = br.readLine(); System.out.println("接收的消息:" + msg); } catch (IOException e) { e.printStackTrace(); } finally{ if(br != null){ try { br.close(); } catch (IOException e) { e.printStackTrace(); } } if(socket != null){ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } }