Socket编程(C语言实现)——TCP协议(网络间通信AF_INET)的流式(SOCK_STREAM)+报式(SOCK_DGRAM)传输

2023-05-16

Socket编程

目前较为流行的网络编程模型是客户机/服务器通信模式

客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求。如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服务器进程B1同时为客户进程A1、A2和B2提供服务。

Socket概述

① 所谓Socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过“套接字”向网络发出请求或者应答网络请求。

② Socket是连接运行在网络上的两个程序间的双向通信的端点。

③ 网络通讯其实指的就是Socket间的通讯。

④ 通讯的两端都有Socket,数据在两个Socket之间通过IO来进行传输。

套接字socket的类型

(1)流式套接字(SOCK_STREAM)

提供面向连接、可靠的数据传输服务,数据无差错、无重复的发送,且按发送顺序接收(TCP协议)

(2)数据报式套接字(SOCK_DGRAM)

提供无连接服务,数据包以独立包形式发送,不提供无措保证,数据可能丢失,并且接收顺序混乱(UDP协议)

(3)原始套接字(SOCK_RAM)

套接字(socket)

socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭).说白了Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

随着Unix的应用推广,套接字有被引进了windows等操作系统。套接字通常只与同一区域的套接字交换数据,windows socket只支持一个通信区域:网际域(AF_INET),这个域被使用忘记协议簇的通信进程使用。

使用Socket进行网络通信的过程

① 服务器程序将一个套接字绑定到一个特定的端口,并通过此套接字等待和监听客户的连接请求。

② 客户程序根据服务器程序所在的主机和端口号发出连接请求。

③ 如果一切正常,服务器接受连接请求。并获得一个新的绑定到不同端口地址的套接字。

④ 客户和服务器通过读、写套接字进行通讯。

客户机/服务器模式

在TCP/IP网络应用中,通信的两个进程间相互作用的主要模式是客户机/服务器模式*(client/server),即客户像服务其提出请求,服务器接受到请求后,提供相应的服务。

服务器:

(1)首先服务器方要先启动,打开一个通信通道并告知本机,它愿意在某一地址和端口上接收客户请求

(2)等待客户请求到达该端口

(3)接收服务请求,处理该客户请求,服务完成后,关闭此新进程与客户的通信链路,并终止

(4)返回第二步,等待另一个客户请求

(5)关闭服务器

客户方:

(1)打开一个通信通道,并连接到服务器所在的主机特定的端口

(2)向服务器发送请求,等待并接收应答,继续提出请求

(3)请求结束后关闭通信信道并终止

基于TCP(面向连接)的socket编程

流式传输:“客户端”,1.socket()函数;2.bind()函数可有可无,加上指定传输端口,不加随机分配端口;3.connect()函数,填写服务端的地址与端口【网络间通信AF_STREAM】或者路径【进程间通信AF_DGRAM】;4.send()函数;5.recv()函数。

流式传输:“服务端”,1.socket()函数;2.bind()函数,必须加上指定传输端口【网络间通信AF_STREAM】或者是路径【进程间通信AF_DGRAM】 ;3.listen()函数,使用isockfd;5.accepc()函数,生成新的fd,inewfd;6.send()函数,inewfd;7.recv()函数,inewfd。

服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。

**基于TCP(面向连接)的socket编程——**流式套接字(SOCK_STREAM)

网络间通信AF_INET,典型的TCP/IP四型模型的通信过程

服务器:

#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>

#define PORT 23		//端口号
#define BACKLOG 5	//最大监听数

int main()
{
	int iSocketFD = 0;  //socket句柄
	int iRecvLen = 0;   //接收成功后的返回值
	int new_fd = 0; 	//建立连接后的句柄
	char buf[4096] = {0}; //
	struct sockaddr_in stLocalAddr = {0}; //本地地址信息结构图,下面有具体的属性赋值
	struct sockaddr_in stRemoteAddr = {0}; //对方地址信息
	socklen_t socklen = 0;  	

	iSocketFD = socket(AF_INET, SOCK_STREAM, 0); //建立socket
	if(0 > iSocketFD)
	{
		printf("创建socket失败!
");
		return 0;
	}	

	stLocalAddr.sin_family = AF_INET;  /*该属性表示接收本机或其他机器传输*/
	stLocalAddr.sin_port = htons(PORT); /*端口号*/
	stLocalAddr.sin_addr.s_addr=htonl(INADDR_ANY); /*IP,括号内容表示本机IP*/

	//绑定地址结构体和socket
	if(0 > bind(iSocketFD, (void *)&stLocalAddr, sizeof(stLocalAddr)))
	{
		printf("绑定失败!
");
		return 0;
	}

	//开启监听 ,第二个参数是最大监听数
	if(0 > listen(iSocketFD, BACKLOG))
	{
		printf("监听失败!
");
		return 0;
	}

	printf("iSocketFD: %d
", iSocketFD);	
	//在这里阻塞知道接收到消息,参数分别是socket句柄,接收到的地址信息以及大小?
	new_fd = accept(iSocketFD, (void *)&stRemoteAddr, &socklen);
	if(0 > new_fd)
	{
		printf("接收失败!
");
		return 0;
	}else{
		printf("接收成功!
");
		//发送内容,参数分别是连接句柄,内容,大小,其他信息(设为0即可)?
		send(new_fd, "这是服务器接收成功后发回的信息!", sizeof("这是服务器接收成功后发回的信息!"), 0);
	}

	printf("new_fd: %d
", new_fd);	
	iRecvLen = recv(new_fd, buf, sizeof(buf), 0);	
	if(0 >= iRecvLen)    //对端关闭连接 返回0
	{	
		printf("接收失败或者对端关闭连接!
");
	}else{
		printf("buf: %s
", buf);
	}

	close(new_fd);
	close(iSocketFD);

	return 0;
}

客户端:

#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>

#define PORT 23			//目标地址端口号
#define ADDR "192.168.1.230" //目标地址IP

int main()
{
	int iSocketFD = 0; //socket句柄
	unsigned int iRemoteAddr = 0;
	struct sockaddr_in stRemoteAddr = {0}; //对端,即目标地址信息
	socklen_t socklen = 0;  	
	char buf[4096] = {0}; //存储接收到的数据

	iSocketFD = socket(AF_INET, SOCK_STREAM, 0); //建立socket
	if(0 > iSocketFD)
	{
		printf("创建socket失败!
");
		return 0;
	}	

	stRemoteAddr.sin_family = AF_INET;
	stRemoteAddr.sin_port = htons(PORT);
	inet_pton(AF_INET, ADDR, &iRemoteAddr);
	stRemoteAddr.sin_addr.s_addr=iRemoteAddr;
	
	//连接方法: 传入句柄,目标地址,和大小
	if(0 > connect(iSocketFD, (void *)&stRemoteAddr, sizeof(stRemoteAddr)))
	{
		printf("连接失败!
");
		//printf("connect failed:%d",errno);//失败时也可打印errno
	}else{
		printf("连接成功!
");
		recv(iSocketFD, buf, sizeof(buf), 0); 将接收数据打入buf,参数分别是句柄,储存处,最大长度,其他信息(设为0即可)。?
		printf("Received:%s
", buf);
	}
	
	close(iSocketFD);//关闭socket	
	return 0;
}

测试:

1、编译服务器、客户端代码:

[root@localhost tcp_socket]# make socket_server_tcp
cc     socket_server_tcp.c   -o socket_server_tcp
[root@localhost tcp_socket]# make socket_client_tcp
cc     socket_client_tcp.c   -o socket_client_tcp
[root@localhost tcp_socket]# 

2、服务器端口监听:

[root@localhost tcp_socket]# ./socket_server_tcp 

3、执行客户端:

非telnet:

服务器端显示:
[root@localhost tcp_socket]# ./socket_server_tcp 
iSocketFD: 3
接收成功!
new_fd: 4
接收失败或者对端关闭连接!

客户端显示:
[root@localhost tcp_socket]# ./socket_client_tcp 
连接成功!
Received:这是服务器接收成功后发回的信息!

telnet服务器:

服务器端显示:
[root@localhost tcp_socket]# ./socket_server_tcp 
iSocketFD: 3
接收成功!
new_fd: 4
buf: ???????? ??!??"??'????#

客户端显示:
[root@localhost tcp_socket]# telnet 192.168.1.230
Trying 192.168.1.230...
Connected to 192.168.1.230.
Escape character is '^]'.
这是服务器接收成功后发回的信息!Connection closed by foreign host.

**基于TCP(面向连接)的socket编程(多线程、循环监听)——**数据报式套接字(SOCK_DGRAM)
网络间通信AF_INET,典型的TCP/IP四型模型的通信过程

服务器:(多线程的【每10秒会打印一行#号】 与 循环监听)

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <pthread.h>

void * test(void *pvData)
{
	while(1)
	{
		sleep(10);
		printf("################################
");
	}
	return NULL;
}

int main(void)
{
	pthread_t stPid = 0; 
	int iRecvLen = 0;
	int iSocketFD = 0;
	char acBuf[4096] = {0};
	struct sockaddr_in stLocalAddr = {0};

	struct sockaddr_in stRemoteAddr = {0};
	socklen_t iRemoteAddrLen = 0;

	/* 创建socket */
	iSocketFD = socket(AF_INET, SOCK_DGRAM, 0);
	if(iSocketFD < 0)
	{
		printf("创建socket失败!
");
		return 0;
	}

	/* 填写地址 */
	stLocalAddr.sin_family = AF_INET;
	stLocalAddr.sin_port   = htons(12345);
	stLocalAddr.sin_addr.s_addr = 0;

	/* 绑定地址 */
	if(0 > bind(iSocketFD, (void *)&stLocalAddr, sizeof(stLocalAddr)))
	{
		printf("绑定地址失败!
");
		close(iSocketFD);
		return 0;
	}
	pthread_create(&stPid, NULL, test, NULL);   //实现了多线程
	
	while(1)     //实现了循环监听
	{
		iRecvLen = recvfrom(iSocketFD, acBuf, sizeof(acBuf), 0, (void *)&stRemoteAddr, &iRemoteAddrLen);

		printf("iRecvLen: %d
", iRecvLen);
		printf("acBuf:%s
", acBuf);
	}
	close(iSocketFD);

	return 0;
}

客户端:

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>

int main(void)
{
	int iRecvLen = 0;
	int iSocketFD = 0;
	int iRemotAddr = 0;
	char acBuf[4096] = {0};
	struct sockaddr_in stLocalAddr = {0};

	struct sockaddr_in stRemoteAddr = {0};
	socklen_t iRemoteAddrLen = 0;

	/* 创建socket */
	iSocketFD = socket(AF_INET, SOCK_DGRAM, 0);
	if(iSocketFD < 0)
	{
		printf("创建socket失败!
");
		return 0;
	}

	/* 填写服务端地址 */
	stLocalAddr.sin_family = AF_INET;
	stLocalAddr.sin_port   = htons(12345);
	inet_pton(AF_INET, "192.168.1.230", (void *)&iRemotAddr);
	stLocalAddr.sin_addr.s_addr = iRemotAddr;

	iRecvLen = sendto(iSocketFD, "这是一个测试字符串", strlen("这是一个测试字符串"), 0, (void *)&stLocalAddr, sizeof(stLocalAddr));


	close(iSocketFD);

	return 0;
}

测试:

1、编译服务器:因为有多线程,所以服务器端进程要进行pthread编译:

[root@localhost udp_socket]# gcc socket_server_UDP.c -pthread -g -o socket_server_UDP

2、服务器监听:

[root@localhost udp_socket]# ./socket_server_UDP 

3、客户端连接服务器:

[root@localhost tcp_socket]# ./socket_client_UDP 

4、服务器端口显示结果:

[root@localhost udp_socket]# ./socket_server_UDP 
iSocketFD: 3
################################
################################
iRecvLen: 27
acBuf:这是一个测试字符串
iSocketFD: 3
################################

5、结果解释说明:

服务器端有主线程和辅线程,主线程,打印客户端发送的请求;辅线程每隔10秒钟打印一排#号。

参考链接:https://blog.csdn.net/zhang___yong/article/details/78702559

java:https://www.cnblogs.com/wzy330782/p/5479833.html

基于TCP/IP和UDP协议的socket编程结构解析:https://blog.csdn.net/zhengnice/article/details/51428080

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Socket编程(C语言实现)——TCP协议(网络间通信AF_INET)的流式(SOCK_STREAM)+报式(SOCK_DGRAM)传输 的相关文章

  • git补丁操作(git diff、git format-patch、git apply、git am)

    https blog csdn net qq 42138454 article details 119058431 实际使用补丁用的 xff1a patch p1 lt device nuwa diff 一 打补丁的两种方法 Git 提供了
  • 三、C++ 链接器 linker

    cilinking 从C 43 43 源码到可执行二进制的过程 compile文件之后进行链接 xff0c 找到每个符号 函数的位置 xff0c 并将其链接在一起 每个文件被编译成一个独立的 obj文件作为translation unit
  • 五、C++中的头文件 Header Files

    头文件 Header Files传统上用于声明某些函数类型 xff0c 以便可以用于整个程序中 例如 xff1a 在一个文件1中创建函数 xff0c 然后想在另一个文件2中使用 xff0c 尝试编译此文件2时 xff0c C 43 43 不
  • 六、如何使用VS调试代码、条件语句

    how to use Visual Studio to debug our code 查看程序断点 调试程序 1 设置断点 断点 xff0c 调试器将中断 xff0c break xff0c 程序调试是将会中断 xff0c continue
  • 七、如何设置C++项目 set up C++ project

    Visual Studio设置项目文件目录 组织项目文件 打开Visual Studio Start Page 起始页 xff0c 新建项目 New Project xff0c C 43 43 下的General Empty Project
  • 八、C++中的循环 for while do...while及控制流语句

    xff08 1 xff09 for while do while循环 简单来讲 xff0c 循环就是多次执行同样的代码 例 xff0c 如何输出重复内容多次 xff1a 代码复制多次 xff1b 写个函数调用多次 xff1b 写循环重复执行
  • 九、C++ 指针 pointer 引用 Reference

    原始指针 raw pointer 非智能指针 smart pointer 指针是一个整数 xff0c 一个数字 xff0c 它存储一个内存地址 创建指针 xff1a void ptr 61 0 void指针表明不关心指针存储地址的数据类型
  • 基础电路-电子电路

    1 1 电流 xff1a 在导体的两端加上电压 xff0c 导体的电子就会在电场的作用下做定向运动 xff0c 形成电子流 xff0c 称之为 电流 xff1b 电流方向和电子移动方向相反 xff1b 电流有直流和之分 1 2 电压 xff
  • CTP工作原理及结构

    1 工作原理 自容TP xff1a 自电容的扫描方式是进行逐行扫描 xff0c 所有通道既是感应通道也是驱动信号通道 xff0c 通过对比触摸前后电容量的变化来判定X Y方向坐标 xff0c 然后组合成触摸点的坐标 互容TP xff1a 互
  • LCD工作原理及结构

    1 主流显示面板技术 xff1a LCD xff0c OLED xff0c MicroLED 2 主流显示屏的发展趋势 3 LCD堆叠结构 xff1a 背光 xff0c 下偏光片 xff0c TFT Glass xff0c CF Glass
  • OLED工作原理及结构

    1 主流显示面板技术 xff1a LCD xff0c OLED xff0c MicroLED 2 主流显示屏的发展趋势 3 OLED堆叠结构 xff1a 相比LCD xff0c OLED没了背光和下偏光片 4 OLED发光原理 xff1a
  • Git Fork操作与配置

    https blog csdn net Lu Ca article details 128612125 我理解的git fork xff1a 将别人 xff08 张三 xff09 仓库包括文件 xff0c 提交历史 xff0c issues
  • 背光的工作原理及结构

    1 什么是背光 xff1a LCD本身是不发光的 xff0c 因此它需要一个外部面光源系统来帮助其显示 xff0c 即背光源 xff08 Backlight xff09 xff1b 2 背光的种类 xff1a 从发光类型来分 xff0c 可
  • Microled简介及关键工艺(巨量转移)

    1 什么是Microled xff1f 通俗来讲 xff0c 将作为发光器件LED用作显示屏的像素 xff0c 固这种LED的尺寸就得做得很小 xff08 约 xff1c 100 m xff09 xff0c 这种技术就是Microled x
  • 数字电路基础-逻辑门电路

    1 门电路的概念 实现基本逻辑运算和复合运算的单元电路称为门电路 xff0c 常用的门电路有非门 与非门 或非门 与非门 与或非门等 2 基本逻辑门电路 a 与门 xff1a 全1出1 xff0c 有0出0 工作原理 xff1a 输入A B
  • 51单片机-控制LED灯

    目录 1 硬件设计 2 软件设计 2 1 点亮一颗LED灯 2 2 LED闪烁 2 3 LED流水灯 3 知识点 3 1 while函数的应用 3 2 常用数据类型 3 3 延时函数的自动生成 1 硬件设计 通过原理图分析 xff0c LE
  • 51单片机-74HC595移位寄存器

    目录 1 74HC595芯片介绍 1 1 引脚定义 1 2 工作原理 2 实际应用 2 1 控制数码管 2 2 点阵屏显示图形 2 3 点阵屏显示动画 3 知识点 3 1 位变量 xff08 sbit bit xff09 3 2 字模提取
  • 51单片机-独立按键控制LED灯

    目录 1 硬件设计 2 软件设计 2 1 独立按键控制LED闪烁 2 2 独立按键控制LED状态 2 3 独立按键控制LED显示二进制 2 4 独立按键控制LED移位 3 知识点 3 1 if语句的运用 3 2 常用运算符 1 硬件设计 轻
  • 51单片机-控制数码管

    目录 1 硬件设计 1 1 LED数码管介绍 1 2 原理图设计 2 软件设计 2 1 静态数码管显示 2 2 动态数码管显示 2 3 模块化编程 xff08 头文件 xff09 3 知识点 3 1 数组 3 2 子函数 3 3 switc
  • LCD的制作工艺

    目录 1 LCD简介 2 LCD制程 2 1 Array制程 2 1 1 像素电路 2 1 2 制程简介 2 2 Cell制程 2 3 Module组装 3 总结 1 LCD简介 LCD是目前显示领域的重要组成部分 xff0c 可通过如下链

随机推荐

  • 51单片机-LCD1602

    目录 1 硬件设计 1 1 LCD1602介绍 1 2 原理图 2 软件设计 2 1 控制原理 2 2 控制时序 2 3 指令集 2 4 程序设计 3 知识点 3 1 宏定义 3 2 指针与数组 3 3 for语句 1 硬件设计 1 1 L
  • 51单片机-矩阵键盘

    目录 1 硬件设计 2 软件设计 2 1 矩阵键盘扫描 2 2 矩阵键盘 密码锁 3 知识点 3 1 模块化编程的应用 3 2 include详解 1 硬件设计 矩阵键盘按键数量较多 xff0c 为了减少I O口的占用 xff0c 通常将按
  • 如何优雅的让fork后的仓库与原仓库同步

    https www cnblogs com tudou1179006580 p 14875486 html https github com selfteaching the craft of selfteaching issues 67
  • UDP——C语言socket编程

    UDP编程相比TCP来说相对简单主要用到sendto 和recvfrom 这两个函数 xff0c 接下来主要介绍一下这两个函数 头文件 span class token macro property span class token dir
  • 函数与宏定义

    前言 本文介绍函数与宏定义 一 函数的概念 1 函数的定义 自定义函数的形式 xff1a 存储类型符 返回值类型符 函数名 xff08 形参说明表 xff09 函数语句体 xff08 1 xff09 存储类型符 函数作用范围 xff0c 默
  • 51单片机-定时器中断

    目录 1 定时器 计数器 1 1 工作原理 1 2 相关寄存器 1 3 工作模式 xff08 模式1 xff09 2 中断系统 2 1 中断的概念 2 2 中断结构 2 3 中断源 2 4 相关寄存器 3 如何配置定时器中断 4 实际应用
  • 51单片机-串口通信

    目录 1 什么是通信 1 1 通信的概念 1 2 传送方式 1 3 同步方式 1 4 传送方向 1 5 校验方式 2 单片机串口介绍 2 1 硬件电路 2 2 电平标准 2 3 常见接口 2 4 内部结构 2 5 相关寄存器 2 6 工作模
  • I2C总线

    目录 1 硬件概述 1 1 常用器件 1 2 总线结构 1 3 工作原理 2 协议概述 2 1 传输格式 2 2 传输特点 2 3 读和写 2 4 时钟同步和总线仲裁 3 转换器概述 4 缓存器概述 1 硬件概述 1 1 常用器件
  • 蓝牙与WiFi

    蓝牙 透传 HAL UART Receive IT amp huart2 uint8 t amp USART2 NewData 1 开启串口2接收中断 RS485orBT 61 0 RS485orBT标志位为1时是RS485模式 xff0c
  • ubuntu 安装任意版本cmake,无须卸载

    ubuntu1804默认的cmake版本为3 10 2 xff0c 在使用中 xff0c 我们经常会遇到cmake要求更高的版本 xff0c 请读者务必不要轻易卸载原有cmake xff0c 因为这样会把之前用 cmake 编译好的包都给卸
  • 什么是结构体【详解】

    本期介绍 x1f356 主要介绍 xff1a 什么是结构体 xff0c 结构体的声明 定义 初始化 以及传参 xff0c 匿名结构体类型 xff0c 如何通过结构体来实现链表数据结构 xff0c 结构体在内存中是如何存储的 xff08 即
  • 结构体类型

    一 xff1a 结构体定义 1 C语言允许用户自己建立由不同类型的数据组成的组合型数据结构 xff0c 它称为结构体 2 一般形式 xff1a struct 结构体名 成员列表 xff1b xff08 1 xff09 struct是声明结构
  • ROS path [0]=/opt/ros/melodic/share/ros、path [1] 、path [2]

    这种错误 xff0c 我遇到是因为在运行launch前 xff0c 额外多开了roscore 解决方法 xff1a 关掉多开的roscore即可
  • word文档如何快速添加空白页

    我们有时在审阅或查看文件时 xff0c 为了编辑需要会想到插入一页的内容 xff0c 那怎么在文档中间添加空白页呢 xff0c 以最常见的speedoffice为例 首先 xff0c 用speedoffice打开一份Word文档 xff0c
  • ROS path [0]...问题

    遇到这种问题时 第一步 xff1a 首先使用rospack find 命令查找该功能包 xff0c rospack find ydlidar ros 第二部 xff1a 如果输出功能包路径则该功能包存在 xff0c 如果提示没有则说明我们需
  • Git上fork后的代码仓库如何与原仓库进行同步

    https blog csdn net wakarimasu article details 109152932 问题场景 xff1a 最近公司项目组不允许个人在远程仓库建分支 xff0c 要求每个人fork一个仓库 xff0c 以后就在自
  • Postman安装与入门简单教程

    在测试技术中 xff0c 接口测试是最基础 最重要 xff0c 也是收益最高的测试技术 xff0c 作为接口测试工具中的No 1 xff0c 一起来看看Postman是怎么入门的吧 目录 1 安装Postman2 注册Postman账号并登
  • 使用 Intel RealSense 采集图片并制作机器视觉数据集

    本文章主要涉及以下工作 xff1a xff08 1 xff09 讲述如何使用 Intel RealSense 相机采集RGB图像 深度图像 伪彩色化的深度图像以及 npy 格式保存的深度数据 xff08 2 xff09 采集到的图像可适用于
  • Postman 使用教程 - 手把手教你 API 接口测试

    Postman 教程目录 API 是什么 xff1f Postman 是什么 xff1f 一 如何安装 Postman二 API 模拟工具 GoRest三 用 Postman 发出第一个 GET 请求 1 GET 请求基本操作2 带参数的
  • Socket编程(C语言实现)——TCP协议(网络间通信AF_INET)的流式(SOCK_STREAM)+报式(SOCK_DGRAM)传输

    Socket编程 目前较为流行的网络编程模型是客户机 服务器通信模式 客户进程向服务器进程发出要求某种服务的请求 xff0c 服务器进程响应该请求 如图所示 xff0c 通常 xff0c 一个服务器进程会同时为多个客户端进程服务 xff0c