Linux中TCP服务端和客户端

服务端

#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <string.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <head.h>#define PORT 6666               //1024-49151
#define IP "192.168.122.120"    //ifconfig查看本机ipint main(int argc, const char *argv[])
{//创建流式套接字int sfd = socket(AF_INET,SOCK_STREAM,0);if(sfd < 0){ERR_MSG("socket");return -1;}printf("sfd= %d\n",sfd);                                                                                                    //填充地址信息结构体,真实的地址信息结构体根据地址族制定//AF_INET: man 7 ipstruct sockaddr_in sin;sin.sin_family         = AF_INET;       //必须填AF_INETsin.sin_port           = htons(PORT);   //端口号:1024~49151(网络端口号的字节序)(端口号存储在2个字节的无符号整数中)sin.sin_addr.s_addr    = inet_addr(IP); //本机IP inconfig查看(本机IP地址的字节序)//设置端口允许端口被快速复用int reuse = 1;if(setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0){ERR_MSG("setsockopt");return -1;}printf("允许端口快速重用成功\n");//绑定服务器的IP和端口号--->必须绑定( bind )if(bind(sfd , (struct sockaddr*)&sin, sizeof(sin)) < 0){ERR_MSG("bind");return -1;}printf("bind success\n");//将套接字设置为被动监听状态( listen)if( listen(sfd,128) < 0){ERR_MSG("listen");return -1;}printf("listen success\n");struct sockaddr_in cin;   //存储客户端的地址信息socklen_t addrlen = sizeof(cin);//从已完成连接的队列中获取一个客户端信息,生成一个新的文件描述符//该文件描述符才是与客户端的通信的文件描述符//int newfd = accept(sfd, NULL ,NULL);  int newfd = accept(sfd, (struct sockaddr*)&cin, &addrlen);if(newfd < 0){ERR_MSG("accept");return -1;}printf("[%s : %d]newfd=%d 客户端连接成功\n",\inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),newfd);char buf[128]="";ssize_t res = 0;while(1){//接收数据bzero(buf,sizeof(buf));res=recv(newfd,buf,sizeof(buf),0);if(res < 0){ERR_MSG("res");return -1;}else if(0 == res){printf("[%s : %d]newfd=%d 客户端已下线\n",\inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),newfd);break;}printf("[%s : %d]newfd=%d : %s\n",\inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),newfd, buf);//发送数据strcat(buf,"*_*");if(send(newfd,buf,sizeof(buf),0) < 0){ERR_MSG("send");return -1;}printf("send succuss\n");}//关闭所有文件描述符close(newfd);close(sfd);return 0;
}

客户端

#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <string.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <head.h>#define PORT 6666               //1024-49151                                              
#define IP "192.168.122.120"    //ifconfig查看本机ip    int main(int argc, const char *argv[])
{//创建流式套接字int cfd = socket(AF_INET,SOCK_STREAM,0);if(cfd < 0){ERR_MSG("socket");return -1;}printf("cfd= %d\n",cfd);//绑定客户端的IP和端口--->非必须绑定//若不绑定,则操作系统会给客户端绑定客户端所在的主机IP,以及随机端口号(49152~65535)//填充地址信息结构体,真实的地址信息结构体根据地址族制定//AF_INET: man 7 ip//要连接哪个服务器就填对应的IP和端口struct sockaddr_in sin;sin.sin_family         = AF_INET;       //必须填AF_INETsin.sin_port           = htons(PORT);   //端口号:填服务器绑定的端口号sin.sin_addr.s_addr    = inet_addr(IP); //IP地址:服务器绑定的IP地址//连接服务器if(connect(cfd, (struct sockaddr*)&sin,sizeof(sin)) < 0){ERR_MSG("connect");return -1;}char buf[128]="";ssize_t res = 0;while(1){bzero(buf,sizeof(buf));printf("请输入>>> ");fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1] = 0;//发送数据if(send(cfd,buf,sizeof(buf),0) < 0){ERR_MSG("send");return -1;}printf("send succuss\n");//接收数据bzero(buf,sizeof(buf));res=recv(cfd,buf,sizeof(buf),0);if(res < 0){ERR_MSG("res");return -1;}else if(0 == res){printf("[%s : %d]cfd=%d 服务器掉线\n",IP,PORT,cfd);break;}printf("[%s : %d]cfd=%d : %s\n",IP,PORT,cfd, buf);}//关闭文件描述符close(cfd);return 0;
}

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

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

相关文章

Linux 文件编辑命令

一、三种模式介绍 命令模式 插入模式(编辑模式) 末行模式 二、模式切换 1.命令模式切换到插入模式 &#xff08;1&#xff09; a //进入到当前光标后开始编辑 &#xff08;2&#xff09; A //进入到当前光标所在行的行末开始编辑 &#xff08;3&#xff09;i //进入当前光…

Python Opencv实践 - 图像缩放

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg_cat cv.imread("../SampleImages/cat.jpg", cv.IMREAD_COLOR) plt.imshow(img_cat[:,:,::-1])#图像绝对尺寸缩放 #cv.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]]) #指定Size大…

最新智能AI系统+ChatGPT源码搭建部署详细教程+知识库+附程序源码

近期有网友问宝塔如何搭建部署AI创作ChatGPT&#xff0c;小编这里写一个详细图文教程吧。 使用Nestjs和Vue3框架技术&#xff0c;持续集成AI能力到AIGC系统&#xff01; 增加手机端签到功能、优化后台总计绘画数量逻辑&#xff01;新增 MJ 官方图片重新生成指令功能同步官方 …

注意:阿里云服务器随机分配可用区说明

阿里云服务器如有ICP备案需求请勿选择随机可用区&#xff0c;因为当前地域下的可用区可能不支持备案&#xff0c;阿里云百科分享提醒大家&#xff0c;如果你的购买的云服务器搭建网站应用&#xff0c;网站域名需要使用这台云服务器备案的话&#xff0c;不要随机分配可用区&…

ATF(TF-A)安全通告 TFV-6 (CVE-2017-5753, CVE-2017-5715, CVE-2017-5754)

ATF(TF-A)安全通告汇总 目录 一、ATF(TF-A)安全通告 TFV-6 (CVE-2017-5753, CVE-2017-5715, CVE-2017-5754) 二、Variant 1 (CVE-2017-5753) 三、Variant 2 (CVE-2017-5715) 四、Variant 3 (CVE-2017-5754) 一、ATF(TF-A)安全通告 TFV-6 (CVE-2017-5753, CVE-2017-5715, C…

tp5中的事务处理

使用事务首先要数据库支持事务&#xff1b; 如下MySQL数据库user表开启事务支持&#xff0c;即设计表->引擎设置为InnoDB->保存 事务处理 1. 数据库的表引擎需要是 InnoDB 才可以使用&#xff0c;如果不是调整即可&#xff1b; 2. 事务处理&#xff0c;需要执行多个 SQ…

一、Go的前景与优势、基础语法

Go简介 Go的公司、场景应用 公司占比&#xff1a; 字节跳动领先&#xff0c;公司内部有上万个微服务使用go来编写&#xff0c;不久前也开源了GO RPC框架KiteX。 同时&#xff0c;腾讯、百度、美团、滴滴、深信服、平安、OPPO、知乎、去哪儿、360、金山、微博、哩哔哩、七牛、…

MOCK测试

介绍 mock&#xff1a;就是对于一些难以构造的对象&#xff0c;使用虚拟的技术来实现测试的过程。 mock测试&#xff1a;在测试过程中&#xff0c;对于某些不容易构造或者不容易获取的对象&#xff0c;可以用一个虚拟的对象来代替的测试方 法。 接口Mock测试&#xff1a;在接口…

Microsoft365家庭版1年订阅新功能及版本对比

Microsoft 365可帮助您工作、学习、组织、连接和创&#xff0c;只需一项方便的订阅&#xff0c;即可尽享具有 Microsft 365 的6款精品应用、可同时登录5 台设备&#xff08;包括 Windows、macOS、iOS 和 Android 设备&#xff09;、高级安全性等&#xff0c;并且可以自由管理授…

中间件多版本冲突的4种解决方案和我们的选择

背景 在小小的公司里面&#xff0c;挖呀挖呀挖。最近又挖到坑里去了。一个稳定运行多年的应用&#xff0c;需要在里面支持多个版本的中间件客户端&#xff1b;而多个版本的客户端在一个应用里运行时会有同名类冲突的矛盾。在经过询问chatGPT&#xff0c;百度&#xff0c;googl…

c语言--浮点数(float)与0值比较

我们定义一个float类型的数据a&#xff0c;赋值为123456789并输出&#xff1a; int main() {float a;a 123456789;printf("%f\n",a);return 0; }输出结果为&#xff1a; 由此可以看出&#xff0c;程序输出的结果并不是其被赋予的值。即说明了浮点数存在一定的误差。…

CentOS 7查看磁盘空间

CentOS如何查看硬盘大小 CentOS是一种基于Linux的操作系统&#xff0c;主要用于服务器端应用。在服务器管理中&#xff0c;硬盘大小是一个非常重要的指标&#xff0c;查看硬盘大小可以帮助系统管理员有效地管理硬盘空间和避免硬盘满了的情况。 方法一&#xff1a;使用df命令 …

【Express.js】express-validator

express-validator express.js 集成 express-validator进行数据校验 在最初的时候&#xff0c;对于请求的数据校验&#xff0c;我们是自定义一个中间件&#xff0c;然后在里面通过最原生的方式检验。在本节&#xff0c;我们将尝试用一种更优雅的方式进行数据校验。 准备工作…

明月之刃:armbian巧借nmtui管理网络连接

文章目录 nmtui简介安装nmtuinmtui使用连接wifi设置主机名称 nmtui简介 nmtui是NetworkManager TUI&#xff08;Text User Interface&#xff09;的缩写&#xff0c;它提供了一个可视化的界面来管理网络连接。但是&#xff0c;在Debian系统中&#xff0c;没有默认安装nmtui工具…

各地区-各行业法人单位、区划数63个指标(2010-2022年)

一、数据介绍 数据名称&#xff1a;各地区-各行业法人单位、区划数63个指标 数据年份&#xff1a;2010-2022年&#xff08;法人单位至2021年&#xff09; 数据样本&#xff1a;404条 数据来源&#xff1a;自我整理 二、指标说明 行政区划代码 地区 长江经济带 经度 纬…

Maven项目防止配置文件读取不到

1. 配置方法 我们使用IDEA创建一个基本的Maven项目时&#xff0c;默认情况下是从src/main/resources中读取xml或properties配置文件的。但是我们有时会把一些xml或properties配置文件放在代码目录下&#xff08;即src/main/java下&#xff09;。因此我们在pom.xml中进行如下配…

Python(八十三)字符串的比较操作

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

pgsql checkpoint机制(1)

检查点触发时机 检查点间隔时间由checkpoint_timeout设置pg_xlog中wall段文件总大小超过参数max_WAL_size的值postgresql服务器在smart或fast模式下关闭手动checkpoint 为什么需要检查点&#xff1f; 定期保持修改过的数据块作为实例恢复时起始位置&#xff08;问题&#xf…

WebAPIs 第一天

1.声明变量const优先&#xff08;补充&#xff09; 2.WebAPI基本认知 作用和分类 DOM树和DOM对象 3.获取DOM元素 4.DOM修改元素内容 5.操作元素属性 6.定时器-间歇函数 一.声明变量const优先 ① 变量声明有var let const ② 建议const优先&#xff0c;尽量使用const…

java的内存模型

Java内存基础 并发编程模型的两个关键问题 线程之间如何通信及线程之间如何同步 线程之间的通信机制有两种&#xff1a;共享内存和消息传递。 在共享内存的并发模型里&#xff0c;线程之间共享程序的公共状态&#xff0c;通过写-读内存中的公共状态 进行隐式通信。在消息传…