osi网络7层架构

简介: osi网络7层架构

一、osi网络7层架构

ip:网络唯一标识。(internet protocol address)网络互联协议地址。分为网络地址和主机地址。

port:端口号,每一个网络应用程序都需要一个以上的端口号。(1-65535)。1000以内的不要用。

osi7层架构

物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。

tcp协议(传输控制协议),保证两个应用程序之间可靠的网络通信。可靠的,低效的。

telent ftp smtp

udp协议(用户数据报文协议)。面向无连接的不可靠的,高效的。

qq snmp dns 在线视频

二、socket简介

套接字,用于描述一个ip和端口号绑定的通信会话(socket连接)。每一个网络服务都会打开一个socket连接。

serverSocket

位于java的net包下面。

此类实现服务器套接字。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。

Socket

此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。

三、基于TCP协议的socket编程

创建一个基于tcp协议的scoket服务器

类 ServerSocket

此类实现服务器套接字。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。

public class TalkServer {
public static void main(String[] args) throws Exception {
//创建一个serversocket在端口7000上,监听客户端请求
ServerSocket server= new ServerSocket(7000);
Socket socket = server.accept();//获取socket对象
//由Scoket对象获得输入流,并构造相应的bufferedReader对象
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//由socket对象得到输出流,并构造printWrite对象
PrintWriter os = new PrintWriter(socket.getOutputStream(), true);
//由控制台输入构造BufferedReader对象
BufferedReader sin= new BufferedReader(new InputStreamReader(System.in));
System.out.println(“client:”+in.readLine());//打印客户端消息
String line = sin.readLine();//从控制台读取输入消息
while(!line.equals(“bye”)){
//把line返回给client
os.println(line);
System.out.println(“server:”+line);
System.out.println(“client:”+in.readLine());
line=sin.readLine();//读取下一条消息
}
  in.close();
  os.close();
  sin.close();
  socket.close();
}

}

使用多线程技术完成多服务对多客户端

package com.aaa.tcp;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class TalkServerThread implements Runnable {
private Socket socket;
public TalkServerThread(Socket socket) {
  super();
  this.socket = socket;
}
@Override
public void run() {
  //由Scoket对象获得输入流,并构造相应的bufferedReader对象
  BufferedReader in;
  try {
    in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    //由socket对象得到输出流,并构造printWrite对象
    PrintWriter os = new PrintWriter(socket.getOutputStream(), true);
    //由控制台输入构造BufferedReader对象
    BufferedReader sin= new BufferedReader(new InputStreamReader(System.in));
    System.out.println("client:"+in.readLine());//打印客户端消息
    String line = sin.readLine();//从控制台读取输入消息
    while(!line.equals("bye")){
      //把line返回给client
      os.println(line);
      System.out.println("server:"+line);
      System.out.println("client:"+in.readLine());
      line=sin.readLine();//读取下一条消息
    }
    in.close();
    os.close();
    sin.close();
    socket.close();
  } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
  }
}

}

测试类

package com.aaa.tcp;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MultiSocketServerTest {
/**
 * @param args
 * @throws Exception 
 */
public static void main(String[] args) throws Exception {
  //多个socket连接,但是端口号一致
  ServerSocket server=new ServerSocket(7000);
  Socket socket=null;
  while(true){
    socket = server.accept();//等待获取来自客户端的socket请求
    //一旦客户端请求到达,开启一个线程,来跟客户端交互
    new Thread(new TalkServerThread(socket)).start();
  }
}

}

四、基于UDP协议的socket编程

InetAddress
public static void main(String[] args) throws Exception {
InetAddress localHost = InetAddress.getLocalHost();
String hostName = localHost.getHostName();
System.out.println(hostName);
String hostAddress = localHost.getHostAddress();
System.out.println(hostAddress);
//获取远程网站的ip
  InetAddress baidu = InetAddress.getByName("www.baidu.com");
  System.out.println(baidu.getHostAddress());
}

使用upd模拟飞秋发送消息

package com.aaa.network;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Date;
/**
  • @author sunshaoshan
  • @description java 模拟飞秋发送消息
  • @company AAA软件
  • 2018-11-5下午4:45:53
*/
public class FeiQiuTest {
/**
*TODO
*@param args
*2018-11-5下午4:45:45
*/
public static void main(String[] args) {
DatagramSocket ds= null;
DatagramPacket dp = null;
InetAddress localHost;
String Version=“1_lbt4_0#128#000C29D68D8F#0#0#0#2.5a”;
Long id=new Date().getTime();//获取当前系统毫秒
String user=“孙韶山”;
String host=“sunshaoshan”;
//long IPMSG_SENDMSG = 0x00000020;//发消息
long IPMSG_SENDMSG = 209;//发消息
String msg=“I kill you!”;
while(true){
try {
    ds=new DatagramSocket();
    //localHost = InetAddress.getByName("DESKTOP-H5URIFQ");
    localHost=InetAddress.getLocalHost();
    String message=Version+":"+id+":"+user+":"+host+":"+IPMSG_SENDMSG+":"+msg;
    //封装数据报文,2425是飞秋的端口号
    ///1version(IPMSG版本):no(消息编号,可以用系统时间):user(发送消息的用户名):host(发送消息的主机名):command(上述Command常量,可以用|组合多个值):msg(消息内容) 
    byte[] buff= message.getBytes("gbk");
    dp = new DatagramPacket(buff, buff.length,localHost,2425);
    //发送报文
    ds.send(dp);
  } catch (UnknownHostException e) {
    e.printStackTrace();
  } catch (SocketException e) {
    e.printStackTrace();
  } catch (IOException e) {
    e.printStackTrace();
  }
  }
  • }

}


目录
相关文章
|
3月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch 中的动态计算图:实现灵活的神经网络架构
【8月更文第27天】PyTorch 是一款流行的深度学习框架,它以其灵活性和易用性而闻名。与 TensorFlow 等其他框架相比,PyTorch 最大的特点之一是支持动态计算图。这意味着开发者可以在运行时定义网络结构,这为构建复杂的模型提供了极大的便利。本文将深入探讨 PyTorch 中动态计算图的工作原理,并通过一些示例代码展示如何利用这一特性来构建灵活的神经网络架构。
242 1
|
13天前
|
运维 监控 网络架构
|
2月前
|
边缘计算 人工智能 安全
5G 核心网络 (5GC) 与 4G 核心网:架构变革,赋能未来
5G 核心网络 (5GC) 与 4G 核心网:架构变革,赋能未来
122 6
|
2月前
|
存储 监控 物联网
蜂窝网络基础架构详解:从基站到核心网
蜂窝网络基础架构详解:从基站到核心网
195 9
|
2月前
|
编解码 人工智能 文件存储
卷积神经网络架构:EfficientNet结构的特点
EfficientNet是一种高效的卷积神经网络架构,它通过系统化的方法来提升模型的性能和效率。
50 1
|
2月前
|
传感器 监控 物联网
无线传感器网络的基本架构及其广泛应用
无线传感器网络的基本架构及其广泛应用
199 0
|
3月前
|
安全 网络安全 数据安全/隐私保护
云原生技术探索:容器化与微服务架构的实践之路网络安全与信息安全:保护数据的关键策略
【8月更文挑战第28天】本文将深入探讨云原生技术的核心概念,包括容器化和微服务架构。我们将通过实际案例和代码示例,展示如何在云平台上实现高效的应用部署和管理。文章不仅提供理论知识,还包含实操指南,帮助开发者理解并应用这些前沿技术。 【8月更文挑战第28天】在数字化时代,网络安全和信息安全是保护个人和企业数据的前线防御。本文将探讨网络安全漏洞的成因、加密技术的应用以及提升安全意识的重要性。文章旨在通过分析网络安全的薄弱环节,介绍如何利用加密技术和提高用户警觉性来构建更为坚固的数据保护屏障。
|
3月前
|
网络协议 安全 网络性能优化
OSI 模型详解:网络通信的七层架构
【8月更文挑战第31天】
583 0
|
3月前
|
Java Android开发 Kotlin
Android项目架构设计问题之要在Glide库中加载网络图片到ImageView如何解决
Android项目架构设计问题之要在Glide库中加载网络图片到ImageView如何解决
35 0
|
3月前
|
Java Android开发 开发者
Android项目架构设计问题之使用Retrofit2作为网络库如何解决
Android项目架构设计问题之使用Retrofit2作为网络库如何解决
60 0