Java 之 网络编程

时间:2021-09-17 09:17:58

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();
}
}
} }