当前位置: 首页 > news >正文

网络编程 0903作业

作业

1、将TCP的CS模型再敲一遍

tcpserver.c

#include <myhead.h>
#define SERPORT 1111
#define SERIP "192.168.58.128"
#define BACKLOG 40
int main(int argc, const char *argv[])
{int oldfd = socket(AF_INET,SOCK_STREAM,0);//1、产生一个原始套接字文件描述符if(oldfd==-1){perror("socket");return -1;}printf("旧的套接字创建成功\n");//2、绑定主机的IP和端口号struct sockaddr_in  sin= {.sin_family = AF_INET, //使用IPv4通信协议族.sin_port = htons(SERPORT),  //设置端口号.sin_addr.s_addr = inet_addr(SERIP)     //设置IP地址为本机IP};//定义服务器地址结构体变量if(bind(oldfd,(struct sockaddr *)&sin,sizeof(sin))==-1)//2、绑定ip{perror("bind");return -1;}printf("绑定成功\n");if(listen(oldfd,BACKLOG)==-1)//3、监听客户端请求{perror("listen");return -1;}printf("监听成功\n");//使用新描述符通信char buff[1024] = "";int newfd;struct sockaddr_in  cin;//定义获取客户端信息的结构体socklen_t cinlen = sizeof(cin);//获取结构体大小newfd = accept(oldfd,(struct sockaddr *)&cin,&cinlen);//4、接收请求,创建新的描述符用于通信if(newfd==-1){perror("accept");return -1;}printf("%s:%d客户端发来连接请求\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));while(1)//5、收发消息{//int len = read(newfd,buff,sizeof(buff));memset(buff,0,sizeof(buff));//清空缓冲区int len = recv(newfd,buff,sizeof(buff),0);printf("读取的信息:%s\n",buff);if(len==0){printf("你客户跑了\n");}strcat(buff,"520");//write(newfd,buff,sizeof(buff));send(newfd,buff,sizeof(buff),0);memset(buff,0,sizeof(buff));//清空缓冲区}close(oldfd);close(newfd);return 0;
}

tcpclient.c

#include <myhead.h>#define CLIPORT 1111
#define CLIIP "192.168.58.128"
int main(int argc, const char *argv[])
{int oldfd = socket(AF_INET,SOCK_STREAM,0);//1、创建原始套节字if(oldfd==-1){perror("socket");return -1;}//2、bind可选//3、连接服务器struct sockaddr_in cin = {.sin_family = AF_INET,//IPV4通信.sin_port = htons(CLIPORT),//端口号转为网络字节序.sin_addr.s_addr = inet_addr(CLIIP)//IP地址转为网络字节序};if(connect(oldfd,(struct sockaddr *)&cin,sizeof(cin))==-1){perror("connect");return -1;}printf("连接服务器成功\n");char buff[1024] = "";while(1)//4、收发消息{memset(buff,0,sizeof(buff));printf("客户端发信息:");fgets(buff,sizeof(buff),stdin);send(oldfd,buff,sizeof(buff),0);//阻塞发送recv(oldfd,buff,sizeof(buff),0);//阻塞接收printf("收到服务器的消息:%s\n",buff);}close(oldfd);return 0;
}

2、UDP服务器中,使用connect函数,实现唯一的客户端与服务器通话

udpserver.c

#include <myhead.h>
#define SERPORT 8888
#define SERIP "192.168.58.128"int main(int argc, const char *argv[])
{//1、创建套接字int oldfd = socket(AF_INET,SOCK_DGRAM,0);//SOCK_DGRAM:UDPif(oldfd==-1){perror("socket");return -1;}//2、绑定struct sockaddr_in sin = {.sin_family = AF_INET,.sin_port = htons(SERPORT),.sin_addr.s_addr = inet_addr(SERIP)};if(bind(oldfd,(struct sockaddr *)&sin,sizeof(sin))==-1){perror("bind");return -1;}//3、收发消息struct sockaddr_in cin;socklen_t cinlen = sizeof(cin);connect(sockfd, (struct sockaddr*)&cin, sizeof(cin));char buff[100];while(1){memset(buff,0,sizeof(buff));int len = recvfrom(oldfd,buff,sizeof(buff),0,(struct sockaddr *)&cin,&cinlen);//不用管谁发的if(len==0){printf("客户端跑了\n");break;}printf("服务器接收的信息:%s\n",buff);//printf("服务器发消息:");//fgets(buff,sizeof(buff),stdin);//sendto(oldfd,buff,sizeof(buff),0,(struct sockaddr *)&cin,sizeof(cin));//printf("发送成功\n");}close(oldfd);return 0;
}

udpclient.c

#include <myhead.h>
#define CLIPORT 8888
#define CLIIP "192.168.58.128"
int main(int argc, const char *argv[])
{int oldfd = socket(AF_INET,SOCK_DGRAM,0);//1、创建套接字if(oldfd ==-1){perror("socket");return -1;}struct sockaddr_in cin = {.sin_family = AF_INET,.sin_port = htons(CLIPORT),.sin_addr.s_addr = inet_addr(CLIIP)};char buff[1024]  ="";while(1)//2、收发信息{printf("客户端发消息:");fgets(buff,sizeof(buff),stdin);sendto(oldfd,buff,sizeof(buff),0,(struct sockaddr *)&cin,sizeof(cin));printf("发送成功\n");}close(oldfd);return 0;
}

知识梳理

TCP和UDP通信基础:

基于TCP通信的流程

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java 入门指南:Java 并发编程 —— 并发容器 ConcurrentSkipListMap
  • 航电系统,无人机的核心!!!
  • Https配置免费SSL证书
  • C++11中的constexpr
  • Linux编程--文件IO(2)、目录
  • vllm源码解析(一):整体架构与推理代码
  • Datawhale X 李宏毅苹果书 AI夏令营 入门 Task3-机器学习框架
  • vue3实现excel文件预览和打印
  • 忆恒创源发布PBlaze7 7A40系列PCIe 5.0企业级SSD,4K随机写突破百万IOPS!
  • Spring 学习笔记
  • 神经网络训练不起来怎么办(五)| Batch Normalization
  • I2C总线
  • CSRF 概念及防护机制
  • 鸿蒙开发培训多少钱?
  • [CISCN2019 华东南赛区]Web111
  • 收藏网友的 源程序下载网
  • css系列之关于字体的事
  • FineReport中如何实现自动滚屏效果
  • git 常用命令
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • MySQL-事务管理(基础)
  • Python打包系统简单入门
  • ReactNativeweexDeviceOne对比
  • Swift 中的尾递归和蹦床
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 从伪并行的 Python 多线程说起
  • 回顾 Swift 多平台移植进度 #2
  • 原生 js 实现移动端 Touch 滑动反弹
  • 原生js练习题---第五课
  • 智能网联汽车信息安全
  • 追踪解析 FutureTask 源码
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #NOIP 2014#Day.2 T3 解方程
  • #图像处理
  • $.proxy和$.extend
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (Java数据结构)ArrayList
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (python)数据结构---字典
  • (STM32笔记)九、RCC时钟树与时钟 第二部分
  • (阿里云万网)-域名注册购买实名流程
  • (二)JAVA使用POI操作excel
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (六)c52学习之旅-独立按键
  • (排序详解之 堆排序)
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (原)本想说脏话,奈何已放下
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET Micro Framework 4.2 beta 源码探析