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

Linux下的简单TCP客户端和服务器

客户端

#include <arpa/inet.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>int main()
{struct sockaddr_in* caddr=(struct sockaddr_in*)malloc(sizeof(struct sockaddr_in));caddr->sin_port = htons(8999);inet_pton(AF_INET, "192.168.101.231", &caddr->sin_addr.s_addr);caddr->sin_family = AF_INET;int cfd = socket(AF_INET, SOCK_STREAM, 0);if (cfd == -1){perror("socket error");return 1;}int res = connect(cfd, (struct sockaddr*)caddr, sizeof(struct sockaddr));if (res == -1){perror("connect error");return 1;}while (1){char buf[1024] = {'\0'};int res = send(cfd, "this is client", strlen("this is client"), 0);if (res != -1){printf("send:%s\n", "this is client");}else{perror("send error");}res = recv(cfd, buf, 1024, 0);if (res == -1){perror("recv error");}else{printf("client recv:%s\n", buf);}memset(buf, 0, 1024);}close(cfd);return 0;
}

服务器

#include <arpa/inet.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>int main()
{struct sockaddr_in saddr;saddr.sin_port = htons(8999);saddr.sin_addr.s_addr = INADDR_ANY;saddr.sin_family = AF_INET;int sfd = socket(AF_INET, SOCK_STREAM, 0);if (sfd == -1){perror("socket error");return 1;}int bind_res = bind(sfd, (struct sockaddr*)&saddr, sizeof(struct sockaddr_in));if (bind_res == -1){perror("bind error");return 1;}listen(sfd, 100);int size = sizeof(struct sockaddr_in);int cfd = accept(sfd, (struct sockaddr*)&saddr, (socklen_t*)&size);while (1){if (cfd == -1){perror("accept error");return 1;}char buf[1024] = {'\0'};int res = recv(cfd, buf, 1024, 0);if (res != -1){printf("recv:%s\n", buf);}strcat(buf, ": is recved by server");res = send(cfd, buf, strlen(buf), 0);if (res == -1){perror("send error");}memset(buf, 0, 1024);}close(cfd);close(sfd);return 0;
}

运行结果:

客户端:

服务器

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 爬虫逆向学习(六):补环境过某数四代
  • 用Python创建一个键盘输入捕获程序
  • 【JavaScript】数据结构之树
  • C# 禁止程序重复启动
  • CSS3 过渡
  • Qt控制开发板的LED
  • 【文件包含】——日志文件注入
  • Unity-Transform类-旋转
  • 使用EXPORT_SYMBOL
  • 目标检测YOLO实战应用案例100讲-基于双目视觉的目标检测与测距系统(下)
  • 大数据-128 - Flink 并行度设置 细节详解 全局、作业、算子、Slot
  • 读构建可扩展分布式系统:方法与实践05分布式缓存
  • hadoop3跑第一个例子wordcount
  • 加载资源时报错-ERR_CONNECTION_RESET,需要多次请求才能拿到资源的有效解决方案
  • Java 入门指南:JVM(Java虚拟机)——类的生命周期与加载过程
  • ES6指北【2】—— 箭头函数
  • CSS居中完全指南——构建CSS居中决策树
  • exports和module.exports
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • Nacos系列:Nacos的Java SDK使用
  • vue 配置sass、scss全局变量
  • 阿里研究院入选中国企业智库系统影响力榜
  • 从setTimeout-setInterval看JS线程
  • 代理模式
  • 基于游标的分页接口实现
  • 通过几道题目学习二叉搜索树
  • 消息队列系列二(IOT中消息队列的应用)
  • 译有关态射的一切
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 阿里云ACE认证之理解CDN技术
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​业务双活的数据切换思路设计(下)
  • #1015 : KMP算法
  • #AngularJS#$sce.trustAsResourceUrl
  • #NOIP 2014# day.1 T2 联合权值
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (52)只出现一次的数字III
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (二)hibernate配置管理
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (离散数学)逻辑连接词
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • (四)js前端开发中设计模式之工厂方法模式
  • (转)Linq学习笔记
  • (转)visual stdio 书签功能介绍
  • (转)项目管理杂谈-我所期望的新人
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .Net Core 微服务之Consul(二)-集群搭建
  • .net core使用RPC方式进行高效的HTTP服务访问