TCP/UDP协议传输

2024-06-19 22:44
文章标签 tcp udp 传输 协议

本文主要是介绍TCP/UDP协议传输,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

TCP

客户端

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>//宏定义错误输出格式>>>>类比封装函数#define ERR_MSG(msg) do{\fprintf(stderr,"line:%d",__LINE__);\perror("msg");\
}while(0);#define IP "192.168.124.62"
#define PORT 8888
int main(int argc, const char *argv[])
{//创建流式套接字int cfd = socket(AF_INET,SOCK_STREAM,0);if(cfd<0){ERR_MSG("scoket");return -1;}printf("创建流式套接字成功 cfd %d\n",cfd);//填充服务器的地址信息结构体//真实的地址信息结构体根据地址族来制定struct sockaddr_in sin;//写一个包含ip端口的构造体sin.sin_family      = AF_INET;sin.sin_port        = htons(PORT);sin.sin_addr.s_addr = inet_addr(IP);//连接指定的服务器if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))<0){ERR_MSG("connect");return -1;}printf("[%s:%d]服务器连接成功\n",IP,PORT);char buf[128];ssize_t res;while(1){bzero(buf,sizeof(buf));//发送printf("请输入>>>>");fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1] = '\0';                                    if(send(cfd,buf,sizeof(buf),0)<0){ERR_MSG("send");return -1;}printf("发送成功\n");//接收bzero(buf,sizeof(buf));res = recv(cfd,buf,sizeof(buf),0);if(res < 0){ERR_MSG("recv");return -1;}else if(res == 0){printf("[%s:%d]服务器下线\n",IP,PORT);break;}printf("[%s:%d] newfd=%d : %s\n",IP,PORT,cfd,buf);}close (cfd);return 0;
}

服务器端

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>#define PORT 8888   //1014~49151
#define IP "192.168.124.62"
#define ERR_MSG(msg) do{\fprintf(stderr,"line:%d",__LINE__);\perror(msg);\
}while(0)
int main(int argc, const char *argv[])
{//创建流式套接字int sfd = socket(AF_INET,SOCK_STREAM,0);if(sfd<0){ERR_MSG("socket");return -1;}printf("流式套接字创建成功 sfd=%d\n",sfd);//允许端口快速被复用int reuse = 1;if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0){ERR_MSG("setsockopt");return -1;}printf("允许端口被重复使用\n");//填充服务器的地址信息结构体,给bind函数使用//真实的地址信息结构体根据地址族制定,AF_LNET-->>man 7 ippstruct sockaddr_in sin;sin.sin_family      = AF_INET;sin.sin_port        = htons(PORT);sin.sin_addr.s_addr = inet_addr(IP);//绑定服务器的地址信息,必须绑定if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))<0){ERR_MSG("bind");return -1;}printf("绑定成功!\n");//将套接字设置尾监听状态if(listen(sfd,128)<0){ERR_MSG("listen");return -1;}printf("监听成功!\n");//获取连接成功的客户端信息,生成一个新的套接字文件描述符struct sockaddr_in cin;socklen_t addrlen = sizeof(cin);int newfd = accept(sfd,(struct sockaddr*)&cin ,&addrlen);if(newfd<0){ERR_MSG("accept");return -1;}                                                                            printf("[%s:%d] newfd=%d 客户端连接成功\n",\inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),newfd);//接收char buf[128];ssize_t res;while(1){bzero(buf,sizeof(buf));res = recv(newfd,&buf,sizeof(buf),0);if(res<0){ERR_MSG("recv");return -1;}else if(res == 0){printf("[%s:%d]客户端下线\n",\inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));break;}printf("[%s:%d]newfd=%d : %s\n",\inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),newfd,buf);//发送printf("请输入>>>>");fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1] = '\0';if(send(newfd,buf,sizeof(buf),0)<0){ERR_MSG("send");return -1;}printf("发送成功\n");}//关闭close (newfd);if(close(sfd)<0){ERR_MSG("close");return -1;}return 0;
}

UDP

服务器端

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/ip.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>#define PORT 6666
#define IP "192.168.124.62"
#define ERR_MSG(msg) do{\fprintf(stderr,"line:%d\n",__LINE__);\perror(msg);\
}while(0)int main(int argc, const char *argv[])
{int fd = socket(AF_INET,SOCK_DGRAM,0);if(fd<0){ERR_MSG("scoket");return -1;}printf("创建流式套接字成功\n");//允许端口被重复使用int reuse = 1;if(setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0){ERR_MSG("setsockopt");return -1;}printf("允许端口被重复使用\n");//绑定服务器地址信息,必须绑定struct sockaddr_in sin;sin.sin_family     = AF_INET;sin.sin_port       = htons(PORT);sin.sin_addr.s_addr= inet_addr(IP);if(bind(fd,(struct sockaddr*)&sin,sizeof(sin))<0){ERR_MSG("bind");return -1;}printf("绑定成功\n");//接收数据char arr[128] = "";struct sockaddr_in cin;socklen_t addrlen = sizeof(cin);while(1){bzero(arr,sizeof(arr));//清空arr数据if(recvfrom(fd,arr,sizeof(arr),0,(struct sockaddr*)&cin,&addrlen) < 0){ERR_MSG("recvfrom");return -1;}printf("[%s:%d] arr=%s\n",\inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),arr);//发送数据strcat(arr,"hello word");if(sendto(fd,arr,sizeof(arr),0,\                                            (struct sockaddr*)&cin,sizeof(cin))<0){ERR_MSG("sendto");return -1;}printf("发送成功\n");}close(fd);return 0;
}

客户端

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>#define PORT 6666
#define IP "192.168.124.62"
#define ERR_MSG(msg) do{\fprintf(stderr,"line:%d\n",__LINE__);\perror(msg);\
}while(0)int main(int argc, const char *argv[])
{int fd = socket(AF_INET,SOCK_DGRAM,0);if(fd<0){ERR_MSG("scoket");return -1;}printf("创建流式套接字成功cd=%d\n",fd);/*  //允许端口被重复使用int reuse = 1;                                                       if(setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0){ERR_MSG("setsockopt");return -1;}printf("允许端口被重复使用\n");
*/  //绑定服务器地址信息,必须绑定struct sockaddr_in sin;sin.sin_family     = AF_INET;sin.sin_port       = htons(PORT);sin.sin_addr.s_addr= inet_addr(IP);
/*  //绑定IP及端口号if(bind(fd,(struct sockaddr*)&sin,sizeof(sin))<0)   {ERR_MSG("bind");return -1;}printf("绑定成功\n");
*/char arr[128];struct sockaddr_in cin;socklen_t addrlen = sizeof(arr);while(1){bzero(arr,sizeof(arr));//清空arr数据//发送数据printf("请输入数据>>>>>");fgets(arr,sizeof(arr),stdin);arr[strlen(arr)-1] = '\0';if(sendto(fd,arr,sizeof(arr),0,\(struct sockaddr*)&sin,sizeof(sin))<0){ERR_MSG("sendto");return -1;}printf("发送成功\n");bzero(arr,sizeof(arr));                                                 //接收数据if(recvfrom(fd,arr,sizeof(arr),0,\(struct sockaddr*)&cin,&addrlen)<0){ERR_MSG("recvfrom");return -1;}printf("[%s:%d] arr=%s\n",\inet_ntoa(sin.sin_addr),ntohs(sin.sin_port),arr);}close(fd);return 0;
}

这篇关于TCP/UDP协议传输的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1076357

相关文章

探索蓝牙协议的奥秘:用ESP32实现高质量蓝牙音频传输

蓝牙(Bluetooth)是一种短距离无线通信技术,广泛应用于各种电子设备之间的数据传输。自1994年由爱立信公司首次提出以来,蓝牙技术已经经历了多个版本的更新和改进。本文将详细介绍蓝牙协议,并通过一个具体的项目——使用ESP32实现蓝牙音频传输,来展示蓝牙协议的实际应用及其优点。 蓝牙协议概述 蓝牙协议栈 蓝牙协议栈是蓝牙技术的核心,定义了蓝牙设备之间如何进行通信。蓝牙协议

【杂记-浅谈DHCP动态主机配置协议】

DHCP动态主机配置协议 一、DHCP概述1、定义2、作用3、报文类型 二、DHCP的工作原理三、DHCP服务器的配置和管理 一、DHCP概述 1、定义 DHCP,Dynamic Host Configuration Protocol,动态主机配置协议,是一种网络协议,主要用于在IP网络中自动分配和管理IP地址以及其他网络配置参数。 2、作用 DHCP允许计算机和其他设备通

[Spring Boot]Netty-UDP客户端

文章目录 简述Netty-UDP集成pom引入ClientHandler调用 消息发送与接收在线UDP服务系统调用 简述 最近在一些场景中需要使用UDP客户端进行,所以开始集成新的东西。本文集成了一个基于netty的SpringBoot的简单的应用场景。 Netty-UDP集成 pom引入 <!-- netty --><dependency><group

TCP 可靠传输的工作原理

转载地址:https://my.oschina.net/xinxingegeya/blog/485233 感谢原作者 TCP 可靠传输的工作原理 ARQ(Automatic Repeat-reQuest)(自动重传请求) 停止等待ARQ协议 连续ARQ协议   停止等待ARQ协议 全双工通信的双发既是发送方也是接收方。下面为了讨论问题的方便,我们仅考虑A发送数据而B接受数据

视频监控平台:支持交通部行业标准JT/T905协议(即:出租汽车服务管理信息系统)的源代码的函数和功能介绍及分享

目录 一、视频监控平台介绍 (一)概述 (二)视频接入能力介绍 (三)功能介绍 二、JT/T905协议介绍 (一)概述 (二)主要内容 1、设备要求 2、业务功能要求 3、技术功能要求 4、性能要求 5、接口要求 6、设备通信协议与数据格式 三、代码和解释 (一)代码和注释 (二)函数功能说明 1. 头文件保护 2. 包含必要的头文件 3. 引入命名空间std

ESP32使用MQTT_TCP连接阿里云

ESP32-IDF中MQTT函数的介绍 esp_mqtt_client_handle_t esp_mqtt_client_init(const esp_mqtt_client_config_t *config) 函数功能:mqtt 客户端初始化 函数形参: mqtt 客户端的配置 函数返回值:正确则返回根据配置创建的 mqtt 客户端句柄;异常则返回 NULL。 其中函数形参 esp_mqtt

计算机网络协议常考点!!!

应用层协议 HTTP协议 基于TCP协议,是一种用于传输超文本和多媒体内容的协议,主要是为浏览器之前的通信而设计的; get请求和post请求区别 请求参数位置不同:get会将请求参数放在URL后面并通过&运算符连接,而post提交会将请求参数放在请求体里; 请求数据量不同:get的请求参数会受到浏览器对URL最大长度的限制,而post是将请求参数放在请求体中,可以请求大量数据; 安全

网络编程篇:HTTP协议

一.预备知识 在客户端访问服务端时,要用ip+port,但是在日常用户访问服务端的时候,并不会直接使用ip,而是使用域名,比如:百度(www.baidu,com)。                                                                                    在浏览器处理时,会将域名解析为对应的ip+port。

H264 视频文件 帧格式 传输封装等 杂碎

rfc3984  Standards Track [Page 2] RFC 3984 RTP Payload Format for H.264 Video February 2005 1.  按照RFC3984协议实现H264视频流媒体 nalu单元 包起始 0x 00 00 00 01 H.264 NAL格式及分析器 http://hi.baidu.com/zsw%5Fdavy/b ...

【LinuxC语言】第一个简单的tcp/ip客户端

文章目录 前言一、客户端连接服务器的示意图二、客户端涉及的相关函数socket函数connect函数struct sockaddr结构体相关的转换函数connect主体函数 发送数据函数接收数据函数关闭socket客户端示例代码 总结 前言 在计算机网络中,TCP/IP 是最常见的网络协议。它为我们提供了一种可靠的方式来发送和接收数据。在这篇文章中,我们将使用 Linux C