物联网
您现在所在的位置:首页>企业动态>物联网

UDP与TCP简单实现

编辑:学到牛牛IT培训    发布日期: 2023-09-01 09:03:53  


网络通信协议:

网络通信中最重要的就是网络通信协议,网络通信协议是一种网络通用语言,为连接不同操作系统和不同硬件体系结构的互联网络提供通信支持。

简单点,网络协议就是网络之间进行沟通、交流的桥梁,只有相同网络协议的计算机才能进行信息的沟通与交流。就像人与人之间一样,只有使用相同语言的人才能进行正常的交流与沟通。

常见的网络通信协议有:UDP、TCP、ICMP、HTTP、HTTPS、FTP等。Internet 的传输层有两个主要协议,互为补充。无连接的是 UDP,面向连接的是 TCP。


1693530266911.jpg


UDP网络通信:

UDP是用户数据报协议(User Datagram Protocol),它为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。并且UDP报文没有可靠性保证、顺序保证和流量控制字段等,可靠性较差。

但是正因为UDP协议的控制选项较少,在数据传输过程中延迟小、数据传输效率高,适合对可靠性要求不高的应用程序,或者可以保障可靠性的应用程序,如DNS、TFTP、SNMP等。一般应用于:周期性的状态信息、图片和视频数据传输、局域网内数据传输。

UDP实现的编码思路:先创建一个套接字,然后对其进行绑定(绑定本机IP地址与端口号)。完成绑定之后即可进行数据的传入或者传出,最后在所有事情结束之后即可关闭套接字。

编码如下:

write.c:

#include <stdio.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <unistd.h>

#include <netinet/in.h>

#include <arpa/inet.h>


int main()

{

int sock = socket( AF_INET,  SOCK_DGRAM,  0 ); // 创建套接字,AF_INET为IPV4协议

// SOCK_DGRAM为数据报

struct sockaddr_in addr;

addr.sin_family = AF_INET;

addr.sin_port = htons(9978); // 此处端口号可以自己设置,一般在5000以上

addr.sin_addr.s_addr = inet_addr("127.0.0.1"); // 填写本机IP地址

bind( sock, (struct sockaddr *)&addr, sizeof(addr) ); // 绑定


int len = sizeof(addr);

char buf[1024] = {0};

scanf( "%s", buf );

sendto( sock, buf, sizeof(buf), 0, (struct sockaddr *)&addr, len ); // 将buf里面的数据发送出去


close( sock ); // 关闭套接字

return 0;

}


read.c:

#include <stdio.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <unistd.h>

#include <netinet/in.h>

#include <arpa/inet.h>


int main()

{

int sock = socket( AF_INET,  SOCK_DGRAM,  0 );


struct sockaddr_in addr;

addr.sin_family = AF_INET;

addr.sin_port = htons(9978);

addr.sin_addr.s_addr = inet_addr("127.0.0.1");

bind( sock, (struct sockaddr *)&addr, sizeof(addr) );


struct sockaddr_in addr1;

int len = sizeof(addr1);

char buf[1024] = {0};

recvfrom( sock, buf, sizeof(buf), 0, (struct sockaddr *)&addr1, &len );

printf( "%s ", buf );


close( sock );

return 0;

}


TCP网络通信:

TCP是传输控制协议(Transmission Control Protocol),比较像打电话。无连接、不可靠、无序、效率高、资源要求低。

TCP实现的编码思路:大致思路与UDP网络通信一致,只是TCP网络通信分客户端与服务端,服务端需要监听。

编码如下:

server.c:

#include <stdio.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <unistd.h>

#include <netinet/in.h>

#include <arpa/inet.h>


int main()

{

int sock = socket( AF_INET,  SOCK_STREAM,  0 ); // 创建套接字,SOCK_STREAM为数据流


struct sockaddr_in addr;

addr.sin_family = AF_INET;

addr.sin_port = htons(9978);

addr.sin_addr.s_addr = INADDR_ANY;

bind( sock, (struct sockaddr *)&addr, sizeof(addr) ); // 绑定


listen( sock, 6 ); // 设置最大同时可连接的客户端数


int len = sizeof(addr);

int fd = accept( sock, (struct sockaddr *)&addr, &len ); // 接纳客户端连接请求

char buf[1024] = {0};

read( fd, buf, 1024 ); // 读取客户端发送过来的数据

printf( "%s ", buf );


close( fd );

close( sock );

return 0;

}


client.c:

#include <stdio.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <unistd.h>

#include <netinet/in.h>

#include <arpa/inet.h>


int main()

{

int sock = socket( AF_INET, SOCK_STREAM, 0 );


struct sockaddr_in addr;

addr.sin_family = AF_INET;

addr.sin_port = htons(9978);

addr.sin_addr.s_addr = inet_addr("127.0.0.1");


connect( sock, (struct sockaddr *)&addr, sizeof(addr) ); // 绑定

char buf[1024] = {0};

scanf( "%s", buf );

write( sock, buf, 1024 ); // 向服务器发送数据


close( sock );

return 0;

}


免费试学
课程好不好,不如实地听一听

封闭学习

2

1

联系我们

电话:028-61775817

邮箱:1572396657@qq.com

地址:成都市金牛区西城国际A座8楼

  • 物联网_物联网专题新闻_物联网IOT资讯-学到牛牛
    物联网_物联网专题新闻_物联网IOT资讯-学到牛牛

    扫一扫,免费咨询

  • 物联网_物联网专题新闻_物联网IOT资讯-学到牛牛
    物联网_物联网专题新闻_物联网IOT资讯-学到牛牛

    微信公众号

  • 物联网_物联网专题新闻_物联网IOT资讯-学到牛牛
物联网_物联网专题新闻_物联网IOT资讯-学到牛牛

学一流技术,找高薪工作

物联网_物联网专题新闻_物联网IOT资讯-学到牛牛

7-24小时服务热线:

028-61775817

版权声明 网站地图

蜀ICP备2021001672号

课程问题轻松问