TCP与UDP基础

思维导图:

TCP:

服务器

#include<myhead.h>
#define SER_IP "192.168.252.163"
#define SER_PORT 6666
int main(int argc, const char *argv[])
{//1、创建用于监听的套接字int sfd=-1;sfd=socket(AF_INET,SOCK_STREAM,0);//参数1:表示使用的是ipv4的通信//参数2:表示使用tcp通信模型//参数3:表示前面已经特定了通信协议if(sfd==-1){perror("socket error");return -1;}printf("sfd=%d\n",sfd);//2、绑定ip地址和端口号//2.1、填充地址信息结构体struct sockaddr_in sin;sin.sin_family=AF_INET;//地址族sin.sin_port=htons(SER_PORT);//端口号sin.sin_addr.s_addr=inet_addr(SER_IP);//IP地址//2.2绑定if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("bind error");return -1;}printf("bind success\n");//3、启动监听,允许客户端连接if(listen(sfd,128)==-1){perror("listen error");return -1;}printf("listen success\n");//4、当有客户端发来连接请求后,创建新的用于通信的套接字//如果不想接收客户端地址信息结构体,则无需传入参数2和参数3//如果想要获取客户端共享信息结构体,则需要传入相关参数struct sockaddr_in cin;//用于接收客户端共享信息结构体socklen_t socklen=sizeof(cin);//用于接收客户端共享信息的大小int newfd=accept(sfd,(struct sockaddr*)&cin,&socklen);if(newfd==-1){perror("accept error");return -1;}printf("newfd=%d 您有新的客户已经上线\n",newfd);printf("客户端IP:%s,端口号为:%d\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));//5、通信套接字与客户端进行收发char rbuf[128]="";while(1){//清空容器bzero(rbuf,sizeof(rbuf));//从套接字中读取数据int res=recv(newfd,rbuf,sizeof(rbuf),0);if(res==0){printf("客户端已经下线\n");break;}printf("[%s:%d]:%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),rbuf);//将收到的字符加上其他字符回过去strcat(rbuf,"*-*");send(newfd,rbuf,strlen(rbuf),0);}//6、关闭套接字close(newfd);close(sfd);return 0;
}

客户端 

#include<myhead.h>
#define SER_IP "192.168.252.163"
#define SER_PORT 6666
int main(int argc, const char *argv[])
{//1、创建用于通信的套接字文件描述符int cfd=socket(AF_INET,SOCK_STREAM,0);if(cfd==-1){perror("socket error");return -1;}printf("cfd=%d\n",cfd);//2、绑定(非必须)//3、连接服务器struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(SER_PORT);sin.sin_addr.s_addr=inet_addr(SER_IP);if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("connect error");return -1;}printf("connect success\n");//4、数据收发char wbuf[128]="";while(1){bzero(wbuf,sizeof(wbuf));printf("请输入>>>");fgets(wbuf,sizeof(wbuf),stdin);wbuf[strlen(wbuf)-1]=0;send(cfd,wbuf,strlen(wbuf),0);printf("发送成功\n");if(strcmp(wbuf,"quit")==0){break;}bzero(wbuf,sizeof(wbuf));recv(cfd,wbuf,sizeof(wbuf),0);printf("收到的数据为:%s\n",wbuf);}//5、关闭套接字close(cfd);return 0;
}

UDP

服务器:

#include <myhead.h>
#define SERVER_IP "192.168.101.104"
#define SERVER_PORT 1314
int main(int argc, const char *argv[])
{//1、创建套接字int sfd=socket(AF_INET,SOCK_DGRAM,0);if(sfd==-1){perror("socket error");return -1;}//2、绑定ip和端口号//先定义地址信息结构体struct sockaddr_in sin;sin.sin_family=AF_INET;//地址族sin.sin_port=htons(SERVER_PORT);//服务器端口号sin.sin_addr.s_addr=inet_addr(SERVER_IP);//服务器ip地址//再进行绑定if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("bind error");return -1;}    //3、收发数据char rbuf[1024];//定义容器接收对端地址信息结构体struct sockaddr_in cin;int size=sizeof(cin);while(1){bzero(rbuf, sizeof(rbuf));//接收数据recvfrom(sfd, rbuf, sizeof(rbuf),0,(struct sockaddr*)&cin, &size);printf("收到客户端发来的消息为:%s\n", rbuf);if(strcmp(rbuf,"end")==0){break;}//回复已收到char wbuf[100]="已收到数据";        sendto(sfd, wbuf, sizeof(wbuf), 0, (struct sockaddr*)&cin,size);         }//4、关闭套接字close(sfd);return 0;
}

客户端 

#include <myhead.h>
#define SERVER_IP "192.168.101.104"
#define SERVER_PORT 1314
int main(int argc, const char *argv[])
{//1、创建套接字int sfd=socket(AF_INET,SOCK_DGRAM,0);if(sfd==-1){perror("socket error");return -1;}//2、绑定ip和端口号(可选)   //定义服务器的地址信息结构体struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(SERVER_PORT);sin.sin_addr.s_addr = inet_addr(SERVER_IP);int maxsize=sizeof(sin);//3、交互数据char rbuf[1024];while(1){//从终端接的数据存入到rbuf中bzero(rbuf,sizeof(rbuf));//清空容器printf("请输入:");fgets(rbuf, sizeof(rbuf),stdin); rbuf[strlen(rbuf)-1]=0;sendto(sfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&sin, sizeof(sin));//客户端数据发送到服务器printf("发送成功\n");if(strcmp(rbuf,"end")==0){break;}//客户端从服务器接收数据char wbuf[100];bzero(wbuf,sizeof(wbuf));recvfrom(sfd,wbuf,sizeof(wbuf),0,(struct sockaddr*)&sin,&maxsize);printf("收到服务器信息:%s\n",wbuf);}//4、关闭套接字close(sfd);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/504237.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

泰迪智能科技企业数据挖掘平台使用场景

企业数据挖掘平台助力企业数据挖掘&#xff0c;数据挖掘平台也在多个领域发挥着重要的作用。 企业数据挖掘平台具有数据抓取、数据清洗、数据分析、机器学习等多项功能&#xff0c;广泛应用于企业的各个领域&#xff0c;包括&#xff1a;金融行业、医疗行业、交通领域、教育、制…

Java对象大小计算

概述 在实际应用中&#xff0c;尤其是在进行JVM调优时&#xff0c;理解并正确估计对象大小是非常重要的&#xff0c;因为这直接影响到内存分配、垃圾回收效率以及应用程序的整体性能。 对象的组成 在Java中&#xff0c;计算一个对象的大小是为了了解它在内存中占用的确切空间…

【洛谷 P9240】[蓝桥杯 2023 省 B] 冶炼金属 题解(二分答案)

[蓝桥杯 2023 省 B] 冶炼金属 题目描述 小蓝有一个神奇的炉子用于将普通金属 O 冶炼成为一种特殊金属 X。这个炉子有一个称作转换率的属性 V V V&#xff0c; V V V 是一个正整数&#xff0c;这意味着消耗 V V V 个普通金属 O 恰好可以冶炼出一个特殊金属 X&#xff0c;当普…

聊聊 HTTP 性能优化

作为用户的我们在 "上网冲浪" 的时候总是希望快一点&#xff0c;尤其是抢演唱会门票的时候&#xff0c;但是现实并非如此&#xff0c;有时候我们会遇到页面加载缓慢、响应延迟的情况。 而 HTTP 协议作为互联网世界的基础&#xff0c;从网站打开速度到移动应用的响应…

P8538 「Wdoi-2」灵山之上神风起 题解

「Wdoi-2」灵山之上神风起 传送门 题目背景 在天狗记者射命丸文的指&#xff08;放&#xff09;引&#xff08;水&#xff09;之下&#xff0c;灵梦一行人找到了山中的神社。 “在妖怪之山上还真的存在其他的神社啊。”灵梦感慨道。她们看到了由树木建造的神社正殿&#xf…

备战蓝桥杯---状态压缩DP进阶题1

我们来看一看一道比较难的问题&#xff08;十分十分的巧妙&#xff09;&#xff1a; 显然我们应该一行一行放&#xff0c;又竖的会对下一行产生影响&#xff0c;我们令横着放为0&#xff0c;竖着放的上方为1. 对于下一行&#xff0c;前一行放1的下面为0&#xff0c;但是会出现…

Flink基本原理 + WebUI说明 + 常见问题分析

Flink 概述 Flink 是一个用于进行大规模数据处理的开源框架&#xff0c;它提供了一个流式的数据处理 API&#xff0c;支持多种编程语言和运行时环境。Flink 的核心优点包括&#xff1a; 低延迟&#xff1a;Flink 可以在毫秒级的时间内处理数据&#xff0c;提供了低延迟的数据…

靶机渗透之My File Server: 1

Name: My File Server: 1Date release: 21 Feb 2020Author: Akanksha Sachin VermaSeries: My File ServerDownload: https://drive.google.com/uc?id1w0grAomPuFaIohBcUwDiI3QIi4fj4kje&exportdownload 对于vulnhub中的靶机&#xff0c;我们都需先下载镜像&#xff0c;然…

【Sora原理与技术实战】Task1 Sora技术原理解析

本笔记来源&#xff1a;开源组织Datawhale24年组队学习 笔记链接&#xff1a;https://datawhaler.feishu.cn/wiki/LxSCw0EyRidru1kFkttc1jNQnnh 直播回看&#xff1a;https://www.bilibili.com/video/BV1wm411f7gf/ For the learner for the dreamer Sora技术原理解析 Sora具体…

vue3 + vite 项目可以使用纯Js开发吗?

答案&#xff1a;可以 创建项目&#xff1a; 按照链接参考或者按官方&#xff1a; webstorm 创建vue3 vite 项目-CSDN博客 项目目录 tsconfig.json 配置允许js allowJs指定是否编译js文件&#xff0c;在任意文件当中,如果我们模块使用js写的&#xff0c;那么我们需要 将all…

java基础-mysql

文章目录 mysql基础面试题什么是mysql什么是事务并发事务带来的影响事物的隔离级别索引大表优化什么是池化思想&#xff0c;什么是数据库连接池&#xff0c;为什么要用数据库连接池⾏锁&#xff0c;表锁&#xff1b;乐观锁&#xff0c;悲观锁MySQL主备同步的基本原理SQL什么情况…

Java | Java中与文件同名的类的构造函数的调用

在Java的学习过程中遇到了这样一段代码&#xff1a; public class Test1 {int a1;public static void main(String []args){System.out.println("java");}public Test1(){System.out.println("构造函数");} }它的运行结果是这样的&#xff0c;构造函数中的…