Socket网络通讯入门(一)

news/2024/10/21 9:46:08/

提示:能力有限,不足以及错误之处还请指出!

文章目录

  • 前言
  • 一、 计算机网络 OSI、TCP/IP、五层协议 体系结构
    • 1.OSI七层模型每层的作用
    • 2.TCP/IP协议分成
    • 3.五层协议体系结构
  • 二、Socket服务端和客户端 简单通信
    • 1.服务端代码
    • 2.客户端
  • 总结


前言

简单学习了解一下Socket网络通讯入门。


提示:以下是本篇文章正文内容,下面仅供参考

一、 计算机网络 OSI、TCP/IP、五层协议 体系结构

如果记得没错,高中就学习了这些基础的东西,现在重新系统复习一下。
为什么会有这些体系分层?
简单来说就是:
1.可以将复杂的问题划分为若干容易处理的问题(有点算法:分治法的感觉)。
2.灵活性好
3.方便管理排错

下图是对应关系:
在这里插入图片描述

1.OSI七层模型每层的作用

七层模型:应用层(Application)、表示层(Presentation)、会话层(Session)、传输层(Transport)、网络层(Network)、数据链路层(Data Link)、物理层(Physical)

物理层:物理层是OSI模型的最低层,负责传输原始比特流,通过物理媒介进行数据的实际传输。它包括定义电气、机械、程序及功能标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。这一层的数据叫做比特。

数据链路层:数据链路层确保无差错的数据在相邻节点之间传输,提供访问媒体的方法,并执行错误检测和修正。这一层的主要任务是将物理层传输的比特流组合成帧,并添加一些用于错误检测和控制的字段。

网络网络层负责在多个网络中选择和管理数据包的路由。它处理数据包从源到目的地的传输和路由选择,主要的协议包括IP(Internet Protocol, 互联网协议)和ICMP(Internet Control Message Protocol, 互联网控制消息协议)等。

传输层:传输层提供端到端的通信服务,确保数据有效、稳定地传输。它提供端到端的通信控制,如流量控制、分段、错误检测和重发等,主要的协议包括TCP(Transmission Control Protocol, 传输控制协议)和UDP(User Datagram Protocol, 用户数据报协议)。

会话层:会话层负责建立和管理通信会话。它用于建立和维护通信会话,如远程过程调用协议(RPC)和结构化查询语言(SQL)等。

表示层:表示层处理数据表示方式,确保一个系统发送的信息能被另一个系统识别和理解。它负责数据格式转换、数据加密和解密,如JPEG、PNG等。

应用层:应用层为应用软件提供网络服务接口,直接支持各种应用和最终用户的网络服务,如HTTP、FTP、SMTP等。它是OSI参考模型中的最高层,直接面向用户。

每一层都有自己的职责和功能,通过相互协作实现了数据的传输和处理。

2.TCP/IP协议分成

应用层:应用层是TCP/IP协议的第一层,是直接为应用进程提供服务的。
(1)对不同种类的应用程序它们会根据自己的需要来使用应用层的不同协议,邮件传输应用使用了SMTP协议、万维网应用使用了HTTP协议、远程登录服务应用使用了有TELNET协议。
(2)应用层还能加密、解密、格式化数据。
(3)应用层可以建立或解除与其他节点的联系,这样可以充分节省网络资源。

传输层:作为TCP/IP协议的第二层,传输层在整个TCP/IP协议中起到了中流砥柱的作用。且在传输层中,TCP和UDP也同样起到了中流砥柱的作用。 传输的是TCP信息,包括,TCP头+信息。TCP头包含:源和目的主机的端口号,顺序号,确认号,校验字。

网络网络层在TCP/IP协议中的位于第三层。在TCP/IP协议中网络层可以进行网络连接的建立和终止以及IP地址的寻找等功能。 传输的是网络数据报,包括ip报头,TCP信息。 ip报头包括:源和目的主机的IP地址,类型和生命期等。

网络接口层:在TCP/IP协议中,网络接口层位于第四层。由于网络接口层兼并了物理层和数据链路层所以,网络接口层既是传输数据的物理媒介,也可以为网络层提供一条准确无误的线路。 传输的是数据帧。包括帧头+IP数据报+帧尾。 帧头中是源和目的MAC地址,类型。 帧尾是校验字。

3.五层协议体系结构

应用层:确定进程之间通信的性质以满足用户的需要;
传输层:负责主机中两个进程之间的通信;
网络层:负责为分组交换网上的不同主机提供通信;
数据链路层:提供无差错帧传送;
物理层:透明的经实际电路传送比特流。

二、Socket服务端和客户端 简单通信

根据通信流程来创建:
在这里插入图片描述

1.服务端代码

先启动服务端,编辑消息用的是:Console.ReadLine();

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
using System.Net;namespace ConsoleApp2
{class Program{static void Main(string[] args){//创建ScoketSocket socketServer = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.IP);//绑定端口IPEndPoint iPEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"),8888);socketServer.Bind(iPEndPoint);//监听socketServer.Listen(0);Console.WriteLine("服务端启动成功!");//循环等待客户端连接Socket connetClient =  socketServer.Accept();Console.WriteLine("客户端连接:"+ ((IPEndPoint)connetClient.RemoteEndPoint));//接收客户端 消息byte[] by = new byte[1024];connetClient.Receive(by);string bystr = Encoding.UTF8.GetString(by);Console.WriteLine("接收到客户端信息:" + bystr);string str = Console.ReadLine();byte[] strbyte = Encoding.UTF8.GetBytes(str);connetClient.Send(strbyte);}}
}

2.客户端

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApp1
{class Program{static void Main(string[] args){//客户端 创建SocketSocket socketClient=  new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.IP);//连接socketClient.Connect("127.0.0.1",8888);string str = Console.ReadLine();byte[] strbyte = Encoding.UTF8.GetBytes(str);socketClient.Send(strbyte);//接收客户端 消息byte[] by = new byte[1024];socketClient.Receive(by);string bystr = Encoding.UTF8.GetString(by);Console.WriteLine("接收到服务端信息:" + bystr);}}
}

总结

上面服务端和客户端的代码,只是用于简单交互示列,正式使用不会如此写法,因为阻塞性太大,正常使用会异步处理。


http://www.ppmy.cn/news/1466879.html

相关文章

摄像头对人脸进行性别和年龄的判断

摄像头对人脸性别和年龄判断 导入必要的库加载预训练的人脸检测模型加载预训练的性别和年龄识别模型定义性别和年龄的标签列表打开摄像头从摄像头读取一帧转换为灰度图像检测人脸遍历检测到的人脸显示视频流按 ‘q’ 或点击窗口的“”退出循环释放摄像头和销毁所有窗口全部代码…

【TB作品】msp430f5529单片机,读取DHT11温湿度,读取adc,oled显示

功能 msp430f5529单片机,读取DHT11温湿度,读取adc,oled显示 硬件 //OLED引脚分配 绿色板子 //DO(SCLK)------P4.3 //D1(DATA)------P4.0 //RES-----------P3.7 //DC------------P8.2 //CS------------P8.1 //mq135 P6.5 //DHT11 P4.1 部…

盲盒系统开发功能架构 源码搭建 定制开发

一、盲盒为何热度这么高? 盲盒热的形成,是产品、消费者和市场三方合力的结果: 从产品看:盲盒产品线比较丰富,新品层出不穷,加上隐藏款或特别款的“双重诱惑”,更加激发盲盒收藏爱好者的收藏欲…

用于脑肿瘤分割的跨模态深度特征学习| 文献速递-深度学习肿瘤自动分割

Title 题目 Cross-modality deep feature learning for brain tumor segmentation 用于脑肿瘤分割的跨模态深度特征学习 01 文献速递介绍 作为最致命的流行病,脑肿瘤的研究越来越受到关注。本文研究了一种基于深度学习的自动分割胶质瘤的方法,称为脑…

网络编程(七)

网络编程(七) UNIX域套接字(本地间进程间通信的技术)(S文件)基于TCP传输基于UDP传输 UNIX域套接字(本地间进程间通信的技术)(S文件) socket同样也可以用于本…

Vue3 双向绑定

需求&#xff1a;父和子实现双向数据绑定 &#xff08;Vue3.4&#xff09; 单参数实现&#xff1a; 父组件------------------<UserNamev-model:first-name"first"v-model:last-name"last" />子组件&#xff1a;------------<script setup> c…

在Linux/Ubuntu/Debian中使用lshw查看系统信息

在Linux/Ubuntu/Debian中使用lshw查看系统信息 lshw 是一个用于显示硬件配置的命令&#xff0c;可以提供系统硬件的详细信息&#xff0c;包括 CPU、内存、硬盘、主板等。该命令需要超级用户权限来获取详细信息。 常见用法&#xff1a; 显示所有硬件信息&#xff1a; sudo l…

21.过拟合和欠拟合示例

1. 背景介绍 在机器学习和深度学习中&#xff0c;过拟合和欠拟合是两个非常重要的概念。过拟合指的是模型在训练数据上表现很好&#xff0c;但在新的测试数据上效果变差的情况。欠拟合则是指模型无法很好地拟合训练数据的情况。这两种情况都会导致模型无法很好地泛化&#xff…