TCP网络编程实例

服务器端代码:

#include<t_stdio.h>
#include<sys/types.h>          
#include <sys/socket.h>
#include<arpa/inet.h>
#include <sys/socket.h>
#include<ctype.h>
#include<unistd.h>
int main(void){struct sockaddr_in serv,cli;socklen_t cli_len;char buf[128];char IP[32];//创建一个通讯端点,返回该端点的文件描述符//创建一个ipv4的tcp连接端口int s_fd=socket( AF_INET ,SOCK_STREAM ,0);//需要对server变量成员初始化serv.sin_family=AF_INET;serv.sin_port=htons(5556);serv.sin_addr.s_addr=htonl(INADDR_ANY);//将s_fd和本地地址,端口号绑定int b=bind(s_fd,(struct sockaddr *)&serv,sizeof(serv));if(b==-1)E_MSG("bind",-1);if(s_fd==-1)E_MSG("socket",-1);//将s_fd设置为被动连接,监听客户端连接的到来 //将客户端到来的连接放入未决连接队列中//指定未决连接队列的长度listen(s_fd,5);while(1){//从s_fd设备的未连接队列中提取一个进程进行处理//返回一个连接描述符,使用这个连接描述符与客户端进行通讯int c_fd=accept(s_fd,(struct sockaddr *)&cli,&cli_len);if(c_fd==-1)E_MSG("accept",-1);//binary--->textinet_ntop(AF_INET,&cli.sin_addr,IP,32); printf("client ip: %s\n",IP);//代码执行到这里,三次握手以及完成,可以进行数据传输了//从c_fd中读取客户端发送过来的请求信息int r = read(c_fd,buf,128);//处理客户端的请求信息int i;for(i=0;i<r;i++){buf[i]=toupper(buf[i]);}//将处理结果回送客户端write(c_fd,buf,r);//关闭本次连接close(c_fd);}return 0;
}

客户端代码:

#include<t_stdio.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include<string.h>
#include<unistd.h>
int main(int argc,char * argv[]){struct sockaddr_in serv;char * msg="this is a test..\n";char buf[128];//创建socket设备,返回该设备的文件描述符int fd=socket(AF_INET,SOCK_STREAM,0);if(fd==-1)E_MSG("socket",-1);//服务器信息初始化serv.sin_family=AF_INET;serv.sin_port=htons(5556);//127.0.0.1 text-->binaryinet_pton(AF_INET,argv[1],&serv.sin_addr);// 向服务器发起连接int c=connect(fd,(struct sockaddr *)&serv,sizeof(serv));if(c==-1)E_MSG("connect",-1);//三次握手成功,向服务器发送请求信息write(fd,msg,strlen(msg)+1);//阻塞等待服务器回应int r=read(fd,buf,128);//将相应信息输出到显示器write(1,buf,r);//关闭连接close(fd);return 0;
}

解析:

  1. 在服务器端,首先创建了一个socket设备,用于建立网络连接。
  2. 使用bind函数,将socket设备与特定的网络地址和端口号绑定。在这里,地址被设为INADDR_ANY,表示该服务器可接受任意网络中的请求,端口号被设为5556
  3. 调用listen函数,使得该socket设备成为一个被动连接的设备,等待客户端的连接请求。该函数的第二个参数5,表示最多可以维护5个客户端的连接请求。
  4. 在一个无限循环中,使用accept函数,从设备的未接连接队列中取出一个连接进行处理。返回的c_fd是用来和客户端进行通信的连接描述符。
  5. 在接收到客户端连接之后,获取客户端的IP地址,打印到控制台。
  6. 使用read函数,读取c_fd中客户端发送过来的请求信息。
  7. 然后对客户端发送来的字符,从小写转换为大写。
  8. 使用write函数,将被转换为大写的字符回送给客户端。
  9. 传输完毕后,使用close函数关闭本次连接。
  10. 客户端也首先创建一个socket设备。
  11. 初始化服务器端的信息,包括网络协议、端口和服务器IP地址。
  12. 调用connect函数向服务器发起连接。
  13. 发起连接后,使用write 函数向服务器发送请求信息,这里请求的信息为 "this is a test.."
  14. 使用read函数等待服务器的回应。
  15. 最后将收到的回应信息输出到显示器,并关闭连接。

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

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

相关文章

unity双层滑动实现

实现功能&#xff1a; 当滑动列表中内容处于顶端的时候&#xff0c;向上滑动优先滑动整个滑动列表&#xff0c;当滑动列表移动到设置位置&#xff0c;即设定的最高处时&#xff0c;继续移动列表内内容。向下移动亦然&#xff0c;当内容处于滑动列表顶端时&#xff0c;移动整个滑…

9.包和工具【go】

在Go语言中,包是代码的组织单元,而工具链则是Go语言提供的命令行工具,用于构建、测试和调试Go代码。下面我将详细介绍如何导入和使用标准库中的包,如何编写自己的包,以及如何使用Go的工具链。 导入和使用标准库中的包 Go的标准库包含了许多预定义的包,你可以通过导入这…

2022-04-15_for循环等_作业

for循环 编写程序数一下 1到 100 的所有整数中出现多少个数字9计算1/1-1/21/3-1/41/5 …… 1/99 - 1/100 的值&#xff0c;打印出结果求10 个整数中最大值在屏幕上输出9*9乘法口诀表二分查找 编写程序数一下 1到 100 的所有整数中出现多少个数字9 #include <stdio.h>in…

深入解析Hadoop生态核心组件:HDFS、MapReduce和YARN

这里写目录标题 01HDFS02Yarn03Hive04HBase1&#xff0e;特点2&#xff0e;存储 05Spark及Spark Streaming关于作者&#xff1a;推荐理由&#xff1a;作者直播推荐&#xff1a; 一篇讲明白 Hadoop 生态的三大部件 进入大数据阶段就意味着进入NoSQL阶段&#xff0c;更多的是面向…

[游戏开发][UE5.3]代码生成蓝图文件并在代码中保存文件。

我看网上有人的做法比我更好&#xff0c;我这个更简单 UE5-GAS:读取Excel数据在蓝图创建并更新GE类 - 知乎 数据配表 测试编辑器API 创建编辑器蓝图文件&#xff0c;继承AssetActionUtility.h 创建在编辑器中显示的函数&#xff0c;可以用中文命名方便其他人使用。 右键任意…

从零开始学Python数据分析:菜鸟也能成高手(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

【数据结构与算法初阶(c语言)】插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序、计数排序-全梳理(万字详解,干货满满,建议三连收藏)

目录 1.排序的概念及其运用 1.1排序的概念 1.2排序运用 1.3常见的排序算法 2.插入排序 2.1 原理演示&#xff1a;​编辑 2.2 算法实现 2.3 算法的时间复杂度和空间复杂度分析 3.希尔排序 3.1算法思想 3.2原理演示 3.3代码实现 3.4希尔算法的时间复杂度 4.冒泡排序 4.1冒泡排…

test01

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

Java的IDEA的工程管理

模块和包的图标&#xff1a; 举个例子&#xff1a; IDEA中创建包&#xff1a; 如图所示&#xff0c;com.LBJ的意思是在com包中创建子包LBJ 参见&#xff1a; IDEA中项目、模块和包的关系_idea中模块和项目-CSDN博客

网站秒收录的6个方法

网站怎么做到秒收录 网站的收录速度对于网站的曝光和流量至关重要。如果能够实现网站的秒收录&#xff0c;将大大提高网站的可见性和访问量。下面介绍几种方法&#xff0c;帮助您实现网站秒收录的目标。 1. 提交sitemap.xml文件 创建并提交sitemap.xml文件是实现网站快速收录…

Netty学习——源码篇9 Netty的Handler其他处理 备份

1 ChannelHandlerContext 每个ChannelHandler被添加到ChannelPipeline后&#xff0c;都会创建一个ChannelHandlerContext&#xff0c;并与ChannelHandler关联绑定。ChannelHandlerContext允许ChannelHandler与其他的ChannelHandler进行交互。ChannelHandlerContext不会改变添加…

U8二次开发-钉钉集成

钉钉开放平台作为企业沟通和协作的重要工具,其技术的每一次迭代都为企业带来了新的机遇和挑战。随着企业对于高效沟通和智能化管理的需求日益增长,钉钉平台的SDK更新显得尤为重要。把传统的U8与钉钉平台集成,可以有效的将业务功能和角色进行前移,打破应用系统二八原则,即8…

知识图谱:构建智能应用的大脑

引言 在当今数字化时代&#xff0c;数据的爆炸式增长使得人们面临着海量信息的处理和利用问题。在这样的背景下&#xff0c;知识图谱作为一种强大的知识表示和管理工具&#xff0c;正逐渐成为解决复杂问题和构建智能应用的关键技术之一。本文将深入探讨知识图谱的概念、重要性…

dailyneaty、希亦、鲸立婴儿洗衣机怎么样?三款卷王测评PK对决

曾经我还是一直选择手洗婴儿衣物&#xff0c;最终还是加入了买婴儿洗衣机的大军&#xff0c;一方面因为我懒&#xff0c;不想再继续手洗&#xff0c;另一方面是因为我看了科普才知道&#xff0c;当我们清洗衣物时&#xff0c;除了要洗掉衣物表面的污渍&#xff0c;更需要消除掉…

MATLAB——知识点备忘

最近在攻略ADC建模相关方面&#xff0c;由好多零碎的知识点&#xff0c;这里写个备忘录。 Matlab 判断一个数是否为整数 1. isinteger 函数 MATLAB中&#xff0c;可以使用 isinteger 函数来判断一个数是否为整数&#xff0c;例如&#xff1a;要判断x是否为整数可以采用以下代…

科研学习|论文解读——情感对感知偶然信息遭遇的影响研究(JASIST,2022)

原文题目 Investigating the impact of emotions on perceiving serendipitous information encountering 一、引言 serendipity一词最初是由霍勒斯沃波尔创造的&#xff0c;他将其定义为“通过意外和睿智发现你并不追求的事物”。信息研究中大多数现有的偶然性定义从几个角度看…

劳动力规划:对企业加速运营的未来展望

近年来&#xff0c;企业面临着过山车般的经济形势&#xff0c;面对消费水平的上涨、市场波动带来的担忧以及数字化的加速转型&#xff0c;许多企业虽然对未来仍秉持着谨慎乐观的态度&#xff0c;但也同时认为自身缺乏持续增长和成功转型的能力。为了让企业能够实现战略目标、应…

从fread 到 磁盘驱动

author: hjjdebug date: 2024年 03月 28日 星期四 16:49:14 CST description: 从fread 到 磁盘驱动 文章目录 1. linux 内核调用栈2. 读中断服务程序.3. 何时计算的柱面,磁头,扇区号? 现代磁盘还有柱面,磁头,扇区概念吗?4. 固定的dev,block, 是不是每次都能找到固定的buffer缓…

算法笔记之蓝桥杯pat系统备考(3)

算法笔记之蓝桥杯&pat系统备考&#xff08;2&#xff09; 多训练、多思考、多总结٩(๑•̀ω•́๑)۶ 八、深搜和广搜 8.1DFS dfs是一种枚举完所有完整路径以遍历所有情况的搜索方法&#xff0c;可以理解为每次都是一条路走到黑的犟种。 以老朋友斐波那契额数列为例&a…

numpy入门及和列表的比较

创建一个np的数组。 例子&#xff1a; import numpy as np# 创建一个列表a [1,2,3,4]# 用列表创建一个numpy数组b np.array(a)print(a的类型,type(a))print(a)print(b的类型,type(b))print(b) 结果&#xff1a; a的类型 <class list> [1, 2, 3, 4] b的类型 <cl…