C#使用TCP/UDP协议通信并用Wireshark抓包分析数据

article/2025/5/18 13:58:14

目录

  • 一、Wireshark抓包软件下载安装
  • 二、控制台程序使用 UDP 通信
    • 1)创建新项目
    • 2)编写代码
    • 3)编译结果
    • 4)抓包分析数据
  • 三、Form窗口程序使用 TCP 通信
    • 1)创建新项目
    • 2)设计图形界面
    • 3)编写代码
    • 4)编译客户端和服务器端
    • 5)抓包分析数据
  • 四、总结
  • 五、参考资料

本文章主要讲述使用 VS2019 编写 C# 程序,并通过 UDP/TCP 进行通信,使用 Wireshark 抓包软件抓取发送的包并分析数据结构,由于涉及到客户端和服务器端,可以使用两台电脑,一台电脑编写客户端代码,另一台电脑编写服务器端代码。

实验环境: Window 10 系统
开发工具: Visual Studio 2019
使用工具: Wireshark 2.6.4

一、Wireshark抓包软件下载安装

下载 Wireshark 安装包,点击下面的链接提取,里面有 2.6.4 和 3.2.7 版本的

注:我安装 3.2.7 版本的时候安装报错1603,百度了好久都没解决,但我室友安装时并没问题,所以我安装的是 2.6.4 版本的,可能是我缺少某个包,你可自行选择版本安装。

链接:https://pan.baidu.com/s/18jMDSNe6Za-iMccuTsvm9w
提取码:vbli

下载好后,就开始来安装(版本不同,但是安装的步骤一样,除了后续我安装了额外的 WinPcap 组件,可能这就是我电脑缺少的吧,哎)。

  • 打开 Wireshark-win64-2.6.4.exe 文件。

在这里插入图片描述

  • 点击 “ Next > ”。

在这里插入图片描述

  • 点击 “ I Agree ”。

在这里插入图片描述

  • 点击 “ Next > ”。

在这里插入图片描述

  • 勾选上 “ Wireshark Desktop Icon ”,意思为创建桌面快捷方式,再点击 “ Next > ”。

在这里插入图片描述

  • 选择保存目录,再点击 “ Next > ”。

在这里插入图片描述

  • 点击 “ Next > ”。

在这里插入图片描述

  • 点击 “ Install ”。

在这里插入图片描述

  • 然后弹出一个窗口,点击 “ 是 ” ,后又弹出一个窗口,点击 “ Next > ”。

在这里插入图片描述

  • 点击 “ I Agree ”。

在这里插入图片描述

  • 点击 “ Install ”。

在这里插入图片描述

  • 点击 “ Finish ”。

在这里插入图片描述

  • 然后 Wireshark 继续安装。
  • 安装完成后,点击 “ Next > ”。

在这里插入图片描述

  • 点击 “ Finish ”。

在这里插入图片描述
至此,Wireshark 就安装完成了!好激动!!!

二、控制台程序使用 UDP 通信

本部分内容: 用 C# 编写一个命令行/控制台 hello world 程序,实现如下功能:在屏幕上连续输出 50 行 “ hello cqjtu!重交物联2018级 ” ;同时打开一个网络 UDP 套接字,向室友电脑或树莓派发送这 50 行消息。

程序实现功能: 从客户端循环发送多条数据,服务器端接收多条数据。

接下来我们创建一个新的 C# 控制台程序。

1)创建新项目

  • 打开 VS2019 ,点击 “ 创建新项目 ”

在这里插入图片描述

  • 选择 “ 控制台应用(.NET Framework) ” ,然后点击 “ 下一步 ”。

在这里插入图片描述

  • 编辑 “ 项目名称 ” ,选择程序保存位置,然后点击 “ 创建 ”。

在这里插入图片描述

  • 创建完毕就如下显示。

在这里插入图片描述

2)编写代码

在控制台上简单输出:

  • 在 Main 函数内书写如下的代码(功能:连续输出 50 行数据)。
for(int i = 0; i < 50; i++){Console.WriteLine("第{0}行:hello cqjtu!重交物联2018级", (i + 1));}System.Console.ReadKey();

在这里插入图片描述

  • 编译输出结果。

在这里插入图片描述
使用 UDP 通信:

这一部分编写一个简单的 UDP 通信实例,下一部分写个更复杂一点的 TCP 通信。

目前最普遍的服务模式是 C/S 模式,所以需要一个客户端 client 和一个服务端 Server ,来实现通信。

比如我现在在我的电脑上运行一个客户端代码,在我室友的电脑上运行一个服务端的代码,就可以实现通信功能。

  • 在我自己的电脑上使用 VS2019 创建一个新项目 client ,并将下列代码复制粘贴进去。(注意头文件!!!使用网络协议需要引入头文件 .Net 和 .Net.Sockets)

客户端:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;namespace Client
{class Program{static void Main(string[] args){//提示信息Console.WriteLine("按下任意按键开始发送...");Console.ReadKey();int m;//做好链接准备UdpClient client = new UdpClient();  //实例一个端口IPAddress remoteIP = IPAddress.Parse("10.60.202.32");  //假设发送给这个IPint remotePort = 11000;  //设置端口号IPEndPoint remotePoint = new IPEndPoint(remoteIP, remotePort);  //实例化一个远程端点 for(int i = 0; i < 50; i++){//要发送的数据:第n行:hello cqjtu!重交物联2018级string sendString = null;sendString += "第";m = i+1;sendString += m.ToString();sendString += "行:hello cqjtu!重交物联2018级";//定义发送的字节数组//将字符串转化为字节并存储到字节数组中byte[] sendData = null;sendData = Encoding.Default.GetBytes(sendString);client.Send(sendData, sendData.Length, remotePoint);//将数据发送到远程端点 }client.Close();//关闭连接//提示信息Console.WriteLine("");Console.WriteLine("数据发送成功,按任意键退出...");System.Console.ReadKey();}}
}

代码流程:

  • ①首先显示提示信息,等待使用人员操作;
  • ②做好连接准备,如:设置IP、端口号等;
  • ③ for 循环发送数据;
  • ④关闭端口;
  • ⑤显示提示信息,等待用户确认退出。

在我室友的电脑上使用 VS2019 创建一个新项目 server,并将下列代码复制粘贴进去。

服务器端:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;namespace Server
{class Program{static void Main(string[] args){int result;string str = "第50行:hello cqjtu!重交物联2018级";UdpClient client = new UdpClient(11000);string receiveString = null;byte[] receiveData = null;//实例化一个远程端点,IP和端口可以随意指定,等调用client.Receive(ref remotePoint)时会将该端点改成真正发送端端点 IPEndPoint remotePoint = new IPEndPoint(IPAddress.Any, 0);Console.WriteLine("正在准备接收数据...");while (true){receiveData = client.Receive(ref remotePoint);//接收数据 receiveString = Encoding.Default.GetString(receiveData);Console.WriteLine(receiveString);result = String.Compare(receiveString, str);if (result == 0){break;}}client.Close();//关闭连接Console.WriteLine("");Console.WriteLine("数据接收完毕,按任意键退出...");System.Console.ReadKey();}}
}

代码流程:

  • ①做好连接准备,并设置结束标志;
  • ②循环接收数据;
  • ③关闭连接;
  • ④显示提示信息,等待用户确定退出。

3)编译结果

客户端:

在这里插入图片描述
服务端:
在这里插入图片描述

4)抓包分析数据

  • 在桌面双击打开之前下载的 Wireshark 。
  • 由于我使用的网线连接,所以是通过以太网通信的,双击 “ 以太网 ”。

在这里插入图片描述

  • 可以看到现在 Wireshark 不断的在抓包,先点击红色的按钮暂停抓包。

在这里插入图片描述

  • 重新编译客户端和服务器端,先不要按下按键发送数据,先挂着,看下一步。

在这里插入图片描述

  • 点击鲨鱼鱼鳍的图标,然后点击 “ Continue without Saving ”,不保存之前抓取的包。

在这里插入图片描述

  • 然后按键盘开始发送数据,发送完后,点击 Wireshark 的红色按钮,停止抓包。

在这里插入图片描述

  • 在方框内输入 “ UDP ” 过滤包,然后就可以看到下面的信息,这些就是我发送给我室友电脑上的 50 条数据,下面开始分析这些数据,只选择其中一条分析。

在这里插入图片描述

  • 在抓包分析数据之前,先有一个网络协议层的概念,主机上的数据都是从应用层→运输层→网络层→数据链路层→物理层(比特流,也就是二进制,高低电平)。

在这里插入图片描述

  • 选中 Ethernet ,这就是数据链路层的帧的头部,相应的下面蓝色部分的十六进制,就是相应的帧头部数据。

在这里插入图片描述

  • 一个帧的头部的主要结构是:
    在这里插入图片描述
  1. 目的地址(Destination):数据的接收方,这里是:10.60.202.32;
    在这里插入图片描述
    在这里插入图片描述
  2. 源地址(Source):数据的发送方,这里是:10.60.191.19;
    在这里插入图片描述
    在这里插入图片描述
  3. 数据类型(Type):分为 IP(0800) 包和 ARP(0806) 包,这个包是 0800 ,所以是 IP 包。
    在这里插入图片描述
    在这里插入图片描述
  4. 数据:后面三排,上层(网络层)传下来的一个 IP 包,数据部分又分为数据部分和填充部分,当这个 IP 包的长度小于 46 个字节,比如数据部分长度为 30 ,那么填充部分(垃圾信息)就是 16 个字节,保证这个帧的总长度最短为 64 个字节(其原因可自行百度),如果数据部分长度为50,那么填充部分就为 0 个字节,最后,数据(数据部分 + 填充部分)的长度最长为 1500 个字节,不能过大,所以帧的总长度最长为 1518 字节,抓取的所有包,都不会超过这个长度。在这里插入图片描述
  5. 校验码:帧的末尾有 4 字节的校验码,但是抓包软件会自动舍去。
  • 再来分析一下网络层的 IP 包:
    在这里插入图片描述
    在这里插入图片描述
  1. Version(版本号):分为 IPv4 和 IPv6 现在普遍都用的 IPv4 ,所以值为 4 ,1 个字节;
    在这里插入图片描述
    在这里插入图片描述
  2. HLen(ip报头长度):32位字的报头长度(HLEN);
    在这里插入图片描述
    在这里插入图片描述
  3. TOS(级别):服务类型描述数据报将如何被处理,比如优先发送等,大多数都是默认为 0 ;
    在这里插入图片描述
    在这里插入图片描述
  4. Datagram Total Length(总长度):包括报头和数据的数据包长度;
    在这里插入图片描述
    在这里插入图片描述
  5. identifier(标识):唯一的 IP 数据包值;
    在这里插入图片描述
  6. Flags(标志):说明是否有数据被分段,我是一条一条的发送多个数据包,每个包的数据很小,没有被分段,所以这里数值为 0 。
    在这里插入图片描述
    在这里插入图片描述
  7. Fragmentation Offset(分段偏移):如果数据包在装人帧时太大,则需要进行分段和重组,这里没有分段,所以偏移量为 0 ;
    在这里插入图片描述
    在这里插入图片描述
  8. TTL(存活期):存活期是在数据包产生时建立在其内部的一个设置,如果这个数据包在这个TTL到期时仍没有到达它要去的目的地,那么它将被丢弃,这个设置将防止IP包在寻找目的地的时候在网络中不断循环,每经过一个路由器,它的值就减一,这里它的值为 128 ,也就是 128 个生存期;
    在这里插入图片描述
    在这里插入图片描述
  9. Protocol(协议):上层协议的端口( TCP 是端口 6;UDP 是端口 17) ,同样也支持网络层协议,如ARP和ICMP,这里值为 17 ,也就是 UDP 协议;
    在这里插入图片描述
    在这里插入图片描述
  10. Header Checksum(校验码):只针对报头的循环冗余校验(CRC);
    在这里插入图片描述
    在这里插入图片描述
  11. Source Address(源地址):消息发送者的 ip 地址,这里是10.60.191.19;
    在这里插入图片描述
    在这里插入图片描述
  12. Destination Address(目的地址):消息接收者的 ip 地址,这里是10.60.202.32;
    在这里插入图片描述
    在这里插入图片描述
  13. ip包头的第六行:用于网络检测、调试、安全以及更多的内容,不过大多数情况都是默认为 0 的;
  • 最后来看一下数据包:
    可以很显然看到,长度为 34 字节,对应的十六进制就是蓝色的区域了,这就是我们要发送的数据:第n行:hello cqjtu!重交物联2018级。
    在这里插入图片描述
    在这里插入图片描述

到此,一个 UDP 包就分析完了。
下面演示如何通过窗口程序使用 TCP 通信,并抓包分析一下 TCP 包。

三、Form窗口程序使用 TCP 通信

本部分内容: 用 VS2019 的 C# 编写一个简单的 Form 窗口程序,有一个文本框 textEdit 和一个发送按钮 button ,运行程序后,可以在文本框里输入文字,如 “ hello cqjtu!重交物联2018级 ” ,点击 button ,将这些文字发送给室友电脑或树莓派,采用 TCP 套接字;

程序实现功能: 从客户端发送多条数据,服务器端接收多条数据,服务器端反馈发送信息给客户端,客户端收到并显示出来。

接下来,我们创建一个新的 C# Form 窗口程序。

1)创建新项目

  • 选中 “ Windows 窗体应用 ” ,再点击 “ 下一步 ”。

在这里插入图片描述

  • 设置项目名称、保存位置,再点击 “ 创建 ” 。

在这里插入图片描述

  • 创建完毕。

在这里插入图片描述

2)设计图形界面

摆放控件:

  • 首先往图形界面内拖动控件并进行摆放,如下图所示。
  • 从工具箱内拖 2 个 TextBox 和 1 个 Button 控件。

注:刚拖出来的 TextBox 只能输入一行,只能横着拖,不能竖着拖,不用担心,看看下面的设置属性,就可以设计出如下的界面了。

在这里插入图片描述
设置消息输入框属性:

  • 左键选中最下面的 TextBox ,并在右下角的属性中找到 Font 属性,并点击 “ … ” 。

在这里插入图片描述

  • 该界面内可以设置文本样式。

在这里插入图片描述

  • 然后在设计属性中的(Name)这里默认的 textBox1 ,也可以更改,但不能重复,唯一标识,这是控件的编号,用于代码编写的时候识别,就像是身份证号一样,不能出现中文。

在这里插入图片描述

  • 在布局这里,Location 是指控件左上角顶点基于窗口所在的位置,Size 是指控件的长和宽,可以自行设置。

在这里插入图片描述
设置消息显示界面属性:

  • 选中一个 TextBox ,并点击黑色的小三角按钮,可以将单行文本框设置为多行文本框。

在这里插入图片描述

  • 添加垂直滚动条:找到 ScrollBars 属性,设置参数为 Vertical 。

在这里插入图片描述

  • 设置边界样式:找到 BorderStyle ,参数设置为 FixedSingle 。

在这里插入图片描述

  • 编号为 textBox2 。

在这里插入图片描述

  • 设置消息显示界面的 TextBox 不可编辑:找到 Enabled 属性,参数设为 False 。

在这里插入图片描述
除此之外,你还可以根据设置消息输入框的文本样式来设置消息显示界面内的文本样式。

设置发送消息按钮属性:

  • 左键点击选中按钮,找到 Text 属性,参数输入为 “ 发送 ” ,则控件上就会显示输入的字样。

在这里插入图片描述

  • 它的唯一标识为:button1

在这里插入图片描述
设置窗体属性:

  • 左击窗体选中它,在右下角的属性中找到 Text 属性,编辑为 “ 客户端 ” ,然后窗体的左上角,就显示为 “ 客户端 ”。
  • 紧接着,有个 AcceptButton 属性,下拉框选中这个 button1 按钮,设置完这个属性后,当我们最后执行这个程序后,按下回车键 = 点击这个按钮。

在这里插入图片描述
至此,控件的一些简单属性就设置完毕了。

在这里插入图片描述
想了解控件的其它属性可以参考:https://wenwen.sogou.com/z/q707115213.htm
你也可以设置更多的属性,使界面更加的好看,这里就不再赘述,着重点在于代码。

3)编写代码

现在来开始编写代码。

  • 双击图形界面的按钮后,VS2019 会自动的转到代码编辑区域。
  • 红色方框后就是我们双击按钮后,要编写触发事件执行过程的代码,也就是点击按钮后,就会执行这个函数体。

在这里插入图片描述

  • 在 button1_Click 函数内复制粘贴如下代码。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace WindowsFormsApp1
{public partial class Form1 : Form{public Form1(){InitializeComponent();}public void button1_Click(object sender, EventArgs e){try{/** 显示当前时间*/string str = "The current time: ";str += DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");textBox2.AppendText(str + Environment.NewLine);/** 做好连接准备*/int port = 2000;string host = "10.60.202.32";//我室友的IP地址IPAddress ip = IPAddress.Parse(host);IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口转化为IPEndPoint实例Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket/** 开始连接*/str = "Connect to server...";textBox2.AppendText(str + Environment.NewLine);c.Connect(ipe);//连接到服务器/**发送消息 */string sendStr = textBox1.Text;str = "The message content: " + sendStr;textBox2.AppendText(str + Environment.NewLine);byte[] bs = Encoding.UTF8.GetBytes(sendStr);str = "Send the message to the server...";textBox2.AppendText(str + Environment.NewLine);c.Send(bs, bs.Length, 0);//发送信息/** 接收服务器端的反馈信息*/string recvStr = "";byte[] recvBytes = new byte[1024];int bytes;bytes = c.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息recvStr += Encoding.UTF8.GetString(recvBytes, 0, bytes);str = "The server feedback: " + recvStr;//显示服务器返回信息textBox2.AppendText(str + Environment.NewLine);/** 关闭socket*/c.Close();}catch (ArgumentNullException f){string str = "ArgumentNullException: " + f.ToString();textBox2.AppendText(str + Environment.NewLine);}catch (SocketException f){string str = "ArgumentNullException: " + f.ToString();textBox2.AppendText(str + Environment.NewLine);}textBox2.AppendText("" + Environment.NewLine);textBox1.Text = "";}}
}

代码流程:

  • 当点击按钮后,button1_Click 函数开始执行。
    ①获取当前时间,并打印到消息显示界面内;
    ②做连接服务器端的准备,如:设置IP、设置端口号、实例socket端口;
    ③打印连接信息,并连接服务器;
    ④从消息输入框获取字符串并按照UTF8编码到字节数组存储,然后发送出去。
    ⑤将从服务器端接收到的字节流按照UTF8解码为字符串并存储打印出来。
    ⑥关闭socket端口变量。
  • 两个 catch 是做异常情况处理,并打印到消息显示界面内。

接下来开始编写服务器端代码:

注:从第三部分: “ Form窗口程序使用 TCP 通信 ” 开始至此,都是在编写客户端的部分,接下来我们需要编写服务器端的代码了。

  • 根据第二部分: “ 控制台程序使用 UDP 通信 ” 创建一个新的控制台程序,这里就不再演示了。
  • 复制下面 main 函数内的代码,并粘贴进你自己的 main 函数体内。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApp2
{class Program{static void Main(string[] args){/** 做好连接准备*/int i = 0;int port = 2000;string host = "10.60.202.32";IPAddress ip = IPAddress.Parse(host);IPEndPoint ipe = new IPEndPoint(ip, port);Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket类s.Bind(ipe);//绑定2000端口/** 循环监听并处理消息*/while (true){i++;try{Console.Write("Perform operations {0} :",i);Console.WriteLine("\t-----------------------------------------------");s.Listen(0);//开始监听Console.WriteLine("1. Wait for connect...");/** 实例一个新的socket端口*/Socket temp = s.Accept();//为新建连接创建新的Socket。Console.WriteLine("2. Get a connect");/** 接收客户端发的消息并做解码处理*/string recvStr = "";byte[] recvBytes = new byte[1024];int bytes;bytes = temp.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息recvStr += Encoding.UTF8.GetString(recvBytes, 0, bytes);Console.WriteLine("3. Server Get Message:{0}", recvStr);//把客户端传来的信息显示出来/** 返回给客户端连接成功的消息*/string sendStr = "Ok!Client send message sucessful!";byte[] bs = Encoding.UTF8.GetBytes(sendStr);temp.Send(bs, bs.Length, 0);//返回客户端成功信息/** 关闭端口*/temp.Close();Console.WriteLine("4. Completed...");Console.WriteLine("-----------------------------------------------------------------------");Console.WriteLine("");//s.Close();//关闭socket(由于再死循环中,所以不用写,但如果是单个接收,实例socket并完成任务后需关闭)}catch (ArgumentNullException e){Console.WriteLine("ArgumentNullException: {0}", e);}catch (SocketException e){Console.WriteLine("SocketException: {0}", e);}}}}
}

4)编译客户端和服务器端

客户端:

在这里插入图片描述

服务器端:

在这里插入图片描述
GIF动画显示:

  • 然后在客户端内输入信息,并点击 “ 发送 ” 按钮或者按回车键发送消息,服务器端显示客户端发来的消息,并做回复(由于使用的 GIF 制作动态图,显示不同步,自己试验结果的时候可以对照来看),然后服务器端处理完消息后,进入下一个准备接收阶段。

客户端:

在这里插入图片描述
服务器端:

在这里插入图片描述
发送多个消息后的结果:

客户端:

在这里插入图片描述
服务器端:

在这里插入图片描述

5)抓包分析数据

  • 按照第二部分的抓包步骤来,开始抓包。
  • 下面这几个包就是我发送给我室友电脑上的信息了。

在这里插入图片描述

  • 以及室友电脑的客户端反馈给我的信息。

在这里插入图片描述

  • 再来看一下 UDP 包和 TCP 包的区别。
    UDP:
    在这里插入图片描述
    第三行:Internet Protocl Version 4:IPv4协议
    第四行:User Datagram Protocol:UDP协议
    TCP:
    在这里插入图片描述
    第三行:Internet Protocl Version 4:IPv4协议
    第四行:Transmission Control Protocol:TCP协议

  • 它们的区别也就在于第四行,第三行都是 IPv4 协议。

  • 这个 ip 包头也是 45 00 开头,对比一下第二部分对 ip 包的分析,这个 ip 包头也是 45 00 开头,所以一个 ip 包的前两个字节一定是 45 00 。
    在这里插入图片描述

  • 生存期也是 128 ,一个包的生存期基本上都是默认的数值 128 ,而这里的协议号是 6 ,这就是 TCP 的协议号,第二部分的协议号是 17 ,是 UDP 的。
    在这里插入图片描述

其余的数据和第二部分抓取的数据包差不多了,这里不再赘述了。
至此本文章就差不多结束了。

四、总结

通过本篇文章,学会了如何使用 UDP/TCP 套接字进行网络通信,这都是基于 C/S 模式,一个客户端,一个服务器端,在使用套接字的时候,端口号、IP地址是必不可缺的,缺一不可,如果你觉得本篇文章还可以的话,谢谢点个赞。

五、参考资料

1、C#套接字编程实例UDP/TCP通信
2、网络编程之UDP套接字
3、c# 实现简单udp数据的发送和接收
4、IP报头结构


http://chatgpt.dhexx.cn/article/xdMRdIR8.shtml

相关文章

SimpleFOC之ESP32(九)—— WIFI、UDP和TCP

目录 说明一、网络通信1.1、准备工作1.2、UDP通信1.3、TCP通信 二、硬件准备三、代码参考四、代码演示4.1、WIFI_AP模式UDP通信4.2、WIFI_STA模式TCP client通信 五、UDP通信控制电机5.1、硬件准备5.2、代码演示5.2.1、串口通信更改为UDP通信5.2.2、笔记本连接AP5.2.3、UDP发送…

如何进行网络编程(代码利用UDP socket实现)

目录 一、什么是网络编程&#xff1f; 二、那么在Java中能调用C语言的函数吗&#xff1f; 三、操作系统提供的socket API主要有两类&#xff08;实际上不止两类&#xff09; 1.流套接字&#xff08;底层使用TCP协议&#xff09; TCP协议的特点&#xff1a; 2.数据报套接字…

北斗系统学习—JT808协议用C语言解析

前言&#xff1a; 本人从事于Linux应用开发(音视频应用方向&#xff09;,现在主要是负者AI摄像头的开发&#xff0c;在学音视频的途中&#xff0c;虽然是个小白&#xff0c;但是更愿意把自己所学音视频的一些知识分享给大家&#xff0c;以后每周都会更新哦&#xff01; 本期介绍…

TCP/IP协议(一、自己动手实现udp)

对TCP/IP协议都只是听过&#xff0c;没有仔细研究过&#xff0c;一些知识体系也比较零散&#xff0c;什么三次握手&#xff0c;四次挥手&#xff0c;滑动窗口&#xff0c;零拷贝技术等等&#xff0c;都是知识有这么个东西&#xff0c;而不知道具体是啥&#xff0c;这几天还是根…

【Linux】传输层协议:UDP和TCP

但人不能永远浪漫下去&#xff0c;那会走向自我毁灭的。浪漫都是水字旁&#xff0c;会把人淹死的。人最终还是要进入一个规则体系&#xff0c;所谓&#xff0c;随心所欲不逾矩嘛 文章目录 一、UDP协议1.端口号2.理解UDP报头3.UDP的特点&#xff08;面向数据报&#xff0c;全双…

Linux网络:UDP协议 | TCP协议

文章目录 前言端口号netstat -- pidof UDP协议TCP协议三次握手 四次挥手确认应答(ACK)机制超时重传机制连接管理机制理解TIME_WAIT状态理解 CLOSE_WAIT 状态 滑动窗口流量控制拥塞控制延迟应答捎带应答面向字节流粘包问题TCP异常情况TCP小结 基于TCP 和 UDP 的应用层协议TCP/UD…

C语言SOCKET编程指南

转载自&#xff1a;http://blog.sina.com.cn/s/blog_79b01f66010163q3.html 这篇文章完全可以作为c语言socket编程指南&#xff0c;无论在任何系统下。感谢作者fenglovel&#xff01; C语言SOCKET编程指南 1、介绍 Socket 编程让你沮丧吗&#xff1f;从man pages中很难得到有…

【socket】从计算机网络基础到socket编程——Windows Linux C语言 + Python实现(TCP+UDP)

一、部分基础知识1.1 计算机网络的体系结构1.11 互联网简介1.12 计算机网络的分类1.13 协议与网络的分层体系结构▶ 协议▶ 网络的分层体系结构 1.14 OSI 七层模型&#xff08;重要&#xff09;▶ OSI 模型的结构▶ OSI 模型各层的功能 1.15 TCP/IP 的体系结构&#xff08;重要…

C语言 C语言基础

C语言 C语言基础 一、简述 对于C语言基础相关方面的表面理解&#xff0c;简单介绍。 二、二进制 生活中常用的是十进制&#xff0c;基数0,1,2,3,4,5,6,7,8,9,。满10进1。 时钟60进制。基数0,1,2...57,58,59。满60进1。60秒为1分钟&#xff0c;60分钟为1小时。 计算机二进制&a…

炼一项专业技能c语言,C语言程序设计_安徽新华电脑专修学院

C语言程序设计&#xff0c;安徽新华电脑专修学院&#xff0c;2013年3月&#xff0c;在安徽省315国际消费者权益日纪念大会暨省消协四届三次理事会会议上&#xff0c;安徽新华电脑专修学院被省消费者协会授予“诚信单位”。 C语言程序设计&#xff0c; 并用c语言进行测试。还有b…

C++中使用UDP Socket发送字节数据

文章目录 参考代码结果展示 参考 这篇文章给的代码也能用 https://blog.csdn.net/qq_36437446/article/details/106446172 CRC代码来自https://blog.csdn.net/huijunma2010/article/details/124151471 在线计算CRC http://www.ip33.com/crc.html 代码 这里的byte是unsigned…

本机UDP收发性能测试

测试内容 测试单机版的UPD客户端和服务端之间的性能&#xff0c;UDP客户端发送数据到UDP服务端&#xff0c;并等待服务端返回&#xff0c;计算出UDP的性能 测试方法 客户端和服务端部署在同一台虚拟机器上&#xff0c;客户端启动多个线程&#xff0c;同时向服务端发送指定数量…

2020复旦大学计算机夏令营机试题

2020复旦大学计算机夏令营机试题 这个是开卷编程&#xff0c;不计入成绩&#xff0c;但是面试会问你做的情况。

复旦大学机试题题解(2017~2021)

前言 尝试把复旦大学历年的机试题做一遍&#xff0c;能做多少是多少了&#xff0c;因为没有数据集所以也不好确认是不是对的~&#xff08;题目来自王道往届学长学姐回忆以及某位热心的同学整理&#xff0c;如果了解来源后&#xff0c;我一定备注来源&#xff09; &#xff08;…

复旦大学:专硕没住宿?我们帮你建!还给补助!

去年&#xff0c;小编发过一篇文章&#xff0c;里面爆出了复旦大学等学校的专硕可能不提供住宿了&#xff1a; 北京大学 上海交通大学 复旦大学 专硕可能不提供住宿&#xff01; 后来&#xff0c;在复旦大学2019年招收攻读硕士学位研究生简章中&#xff0c;学校官方公布了不为专…

复旦大学机试题(2017-2021)

计院2021 1.完全二叉树 给定一颗二叉树&#xff0c;树的每个节点的值为一个正整数。如果从根节点到节点 N 的路径上不存在比节点 N 的值大的节点&#xff0c;那么节点 N 被认为是树上的关键节点。求树上所有的关键节点的个数。请写出程序&#xff0c;并解释解题思路。 例子&a…

三战上岸复旦工研院考研回忆(无干货)

干货链接&#xff1a; 复旦085400电子信息专硕初试经验分享 复旦085400电子信息专硕复试经验分享 复旦软院电子信息初试961真题回忆 说说一下我的考研经历&#xff0c;都是流水账&#xff0c;不涉及干货&#xff08;干货参照其他博客&#xff09;&#xff0c;如果读者能有所借…

2020年复旦大学夏令营机试题及代码(VS2019 C++)

注:代码是本菜鸡自己个儿写的,没有找到参考答案,欢迎各位大佬批评指正. 题目如下图所示&#xff08;图片来源网上&#xff09;: 第1题 该题主要考察拓扑排序.其实该算法有通用模板,但我写的时候没有意识到使用,代码不是很规范. #define _CRT_SECURE_NO_WARNINGS#include &…

复旦大学研究生机试(2019)

1. 计算机学院 今年的题目可以说是挺难的&#xff0c;第一题虽然像是送分题&#xff0c;实际上也不是很简单。第二题第三题是动态规划问题&#xff0c;而且复旦据说会卡大数&#xff0c;今年150人考生据说只有一个AC&#xff0c;大部分人只做出第一题&#xff0c;个别零分。 …

【20保研】2019年复旦大学工程与应用技术研究院全国优秀大学生夏令营通知

点击文末的阅读原文或者公众号界面左下角的保研夏令营或者公众号回复“夏令营”是计算机/软件等专业的所有保研夏令营信息集合&#xff0c;会一直更新的。 为了促进我国高校优秀大学生之间的交流、加强学生对复旦大学工研院的了解、特别是吸引优秀学生继续深造&#xff0c;探索…