2023/12/15 work

1.  tcp 客户端、服务端通讯

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <myhead.h>#define SERVICE_PORT 9994
#define SERVICE_IP "192.168.0.106"int main(int argc, const char *argv[])
{//服务端//1. 创建socketint serviceId;if((serviceId = socket(AF_INET,SOCK_STREAM,0)) == -1){perror("service socket error");return -1;}//2. 绑定struct sockaddr_in serviceAddr;serviceAddr.sin_family = AF_INET;serviceAddr.sin_port = htons(SERVICE_PORT);serviceAddr.sin_addr.s_addr = inet_addr(SERVICE_IP);if(bind(serviceId,(struct sockaddr*)&serviceAddr,sizeof(serviceAddr)) == -1){perror("service bind error");return -1;}//3.监听if(listen(serviceId,128) ==-1){perror("service listen error");return -1;}printf("service success %d\n",serviceId);//4. 接收连接请求,接收客户端ipint newServiceId;struct sockaddr_in cliAddr;int cliAddrLen = sizeof(cliAddr);if((newServiceId = accept(serviceId,(struct sockaddr*)&cliAddr,&cliAddrLen)) == -1){perror("service accept error");return -1;}printf("[%s:%d]\n",inet_ntoa(cliAddr.sin_addr),ntohs(cliAddr.sin_port));//5. 循环接收消息char sbuf[120] ="";while(1){bzero(sbuf,sizeof(sbuf));//读取int len = recv(newServiceId,sbuf,sizeof(sbuf),0);printf("[%s:%d ] 客户端发送的消息 %s \n",inet_ntoa(cliAddr.sin_addr),ntohs(cliAddr.sin_port),sbuf);if(len == 0){printf("client break\n");break;}if(strcmp(sbuf,"tc") ==0){printf("service break\n");break;}//拼接个笑脸发送给客户端strcat(sbuf,"*_*");send(newServiceId,sbuf,sizeof(sbuf),0);}//关闭文件描述符close(newServiceId);close(serviceId);return 0;
}#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <myhead.h>#define SERVICE_PORT 9994
#define SERVICE_IP "192.168.0.106"int main(int argc, const char *argv[])
{//客户端//1.创建socketint clientId;if((clientId = socket(AF_INET,SOCK_STREAM,0)) == -1){perror("client socket error");return -1;}//2. 客户端不绑定//3. 客户端连接服务器端struct sockaddr_in cliAddr;cliAddr.sin_family = AF_INET;cliAddr.sin_port = htons(SERVICE_PORT);cliAddr.sin_addr.s_addr = inet_addr(SERVICE_IP);if(connect(clientId,(struct sockaddr*)&cliAddr,sizeof(cliAddr)) == -1){perror("client connect error");return -1;}printf("client socket success\n");//4.发送消息给客户端及接收服务器端消息char cbuf[120] ="";while(1){bzero(cbuf,sizeof(cbuf));fgets(cbuf,sizeof(cbuf),stdin);//处理\ncbuf[strlen(cbuf) -1] = 0;//发送消息send(clientId,cbuf,sizeof(cbuf),0);bzero(cbuf,sizeof(cbuf));//接收到的消息int len = recv(clientId,cbuf,sizeof(cbuf),0);printf("[%s:%d] 服务器发送的消息 %s\n",SERVICE_IP,SERVICE_PORT,cbuf);if(len == 0 ){printf("service break\n");break;}if(strcmp(cbuf,"tc") == 0){printf("client break");break;}}//关闭socket流描述符close(clientId);return 0;
}

2.udp 客户端 服务器端通讯

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <myhead.h>#define SERVICE_PORT 8889
#define SERVICE_IP "192.168.0.106"int main(int argc, const char *argv[])
{//udp服务端//1.创建socketint udpService;if((udpService = socket(AF_INET,SOCK_DGRAM,0)) == -1){perror("udpService socket error");return -1;}//绑定struct sockaddr_in udpAddr;udpAddr.sin_family = AF_INET;udpAddr.sin_port = htons(SERVICE_PORT);//点分十进制 ip 转化成 网络套接字 udpAddr.sin_addr.s_addr = inet_addr(SERVICE_IP);if(bind(udpService,(struct sockaddr*)&udpAddr,sizeof(udpAddr)) == -1){perror("udpService bind error");return -1;}//服务端获取到客户端 ip 及端口struct sockaddr_in udpCliAddr;int udpCliAddrLen = sizeof(udpCliAddr);printf("udpService success\n");//接收/发送消息char ubuf[120] ="";while(1){bzero(ubuf,sizeof(ubuf));int len = recvfrom(udpService,ubuf,sizeof(ubuf),0,(struct sockaddr*)&udpCliAddr,&udpCliAddrLen);printf("[%s:%d] 客户端发送的消息 %s\n",inet_ntoa(udpCliAddr.sin_addr),ntohs(udpCliAddr.sin_port),ubuf);if(strcmp(ubuf,"tc") == 0){printf("udpService break\n");break;}//发送strcat(ubuf,"*_*");sendto(udpService,ubuf,sizeof(ubuf),0,(struct sockaddr*)&udpCliAddr,udpCliAddrLen);}close(udpService);return 0;
}#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <myhead.h>#define SERVICE_PORT 8889
#define SERVICE_IP "192.168.0.106"int main(int argc, const char *argv[])
{//udp客户端//1. 创建socketint udpClient;if((udpClient = socket(AF_INET,SOCK_DGRAM,0)) == -1){perror("udpClient socket error");return -1;}struct sockaddr_in udpService;udpService.sin_family = AF_INET;udpService.sin_port = htons(SERVICE_PORT);udpService.sin_addr.s_addr = inet_addr(SERVICE_IP);//int udpLen = sizeof(udpService);printf("udpClient success\n");char ucbuf[120] ="";while(1){bzero(ucbuf,sizeof(ucbuf));printf("发送消息 ");fgets(ucbuf,sizeof(ucbuf),stdin);//处理\nucbuf[strlen(ucbuf)-1] = 0;//发送sendto(udpClient,ucbuf,sizeof(ucbuf),0,(struct sockaddr*)&udpService,sizeof(udpService));bzero(ucbuf,sizeof(ucbuf));//接收int len = recvfrom(udpClient,ucbuf,sizeof(ucbuf),0,NULL,NULL);printf("[%s:%d] 服务端回复的消息 %s\n",SERVICE_IP,SERVICE_PORT,ucbuf);if(strcmp(ucbuf,"tc") == 0){printf("udpClient break\n");break;}}close(udpClient);return 0;
}

3. 思维导图

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

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

相关文章

LangChain 28 BabyAGI编写旧金山的天气预报

LangChain系列文章 LangChain 实现给动物取名字&#xff0c;LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄LangChain 4用向量数据库Faiss存储&#xff0c;读取YouTube的视频文本搜索I…

verilog基础语法-计数器

概述&#xff1a; 计数器是FPGA开发中最常用的电路&#xff0c;列如通讯中记录时钟个数&#xff0c;跑马灯中时间记录&#xff0c;存储器中地址的控制等等。本节给出向上计数器&#xff0c;上下计数器以及双向计数器案例。 内容 1. 向上计数器 2.向下计数器 3.向上向下计数…

《数据结构、算法与应用C++语言描述》-机器调度-最长处理时间(LPT)-堆应用

机器调度 完整可编译运行代码见&#xff1a;Github::Data-Structures-Algorithms-and-Applications/_28LongestProcessingTime 问题描述 一个工厂具有 m台一模一样的机器。我们有n 个任务需要处理。设作业i的处理时间为 t i t_i ti​&#xff0c;这个时间包括把作业放入机器…

【Logback技术专题】「入门到精通系列教程」深入探索Logback日志框架的原理分析和开发实战技术指南(上篇)

深入探索Logback日志框架的原理分析和开发实战指南系列 Logback日志框架Logback基本模块logback-corelogback-classiclogback-accessLogback的核心类LoggerAppenderLayoutLayout和Appender filterlogback模块和核心所属关系 Logbackj日志级别日志输出级别日志级别介绍 Logback的…

【数据结构】树状数组总结

知识概览 树状数组有两个作用&#xff1a; 快速求前缀和 时间复杂度O(log(n))修改某一个数 时间复杂度O(log(n)) 例题展示 1. 单点修改&#xff0c;区间查询 题目链接 活动 - AcWing本活动组织刷《算法竞赛进阶指南》&#xff0c;系统学习各种编程算法。主要面向…

如何使用JavaScript 将数据网格绑定到 GraphQL 服务

前言 作为一名前端开发人员&#xff0c;GraphQL对于我们来说是令人难以置信的好用。它可以用来简化数据访问&#xff0c;这让我们的工作变得更加容易。 什么是 GraphQL&#xff1f;它是一个抽象层&#xff0c;位于任意数量的数据源之上&#xff0c;并为您提供一个简单的 API …

为什么选择计算机?大数据时代学习计算机的价值探讨

还记得当初自己为什么选择计算机? 计算机是在90年代兴起的专业,那时候的年轻人有驾照、懂外语、懂计算机是很时髦的事情! 当初你问我为什么选择计算机,我笑着回答:“因为我梦想成为神奇的码农!我想像编织魔法一样编写程序,创造出炫酷的虚拟世界!”谁知道,我刚入门的…

UE5 第三人称游戏模板白屏问题

文章目录 问题背景问题解决解决方法一解决方法二解决方法三解决方法四 问题背景 在虚幻引擎5创建第三人称游戏模板时&#xff0c;打开场景显示白屏&#xff0c;物体可以点击选中&#xff0c;出现类似这种问题&#xff0c;考虑是曝光的原因&#xff0c;在确定引擎没有问题的情况…

C语言—小小圣诞树

这个代码会询问用户输入圣诞树的高度&#xff0c;然后根据输入的高度在控制台上显示相应高度的圣诞树。 #include <stdio.h>int main() {int height, spaces, stars;printf("请输入圣诞树的高度: ");scanf("%d", &height);spaces height - 1;st…

D3132|贪心算法

435.无重叠区间 初始思路&#xff1a; 我的思路就是如果有两个区间重叠&#xff0c;保留end比较小的那个区间&#xff0c;删除end比较大的区间。 class Solution {public int eraseOverlapIntervals(int[][] intervals) {Arrays.sort(intervals, new Comparator<int[]>…

CentOS7安装Docker及添加阿里云镜像加速详细教程

Docker官方安装教程网站&#xff1a;Install Docker Engine on CentOS | Docker Docs 具体流程如下&#xff1a; 1.确定你是CentOS7及以上版本 cat /etc/redhat-release 2.yum安装gcc相关 yum -y install gcc yum -y install gcc-c 3.安装需要的软件包 3.1安装docker引擎…

力扣刷题-二叉树-找树左下角的值

513 找树左下角的值 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1&#xff1a; 示例 2&#xff1a; 思路 层序遍历 直接层序遍历&#xff0c;因为题目说了是最底层&#xff0c;最左边的值&a…