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

【Linux系统编程】TCP实现--socket

使用套接字socket实现服务器和客户端之间的TCP通信。

流程如下:
在这里插入图片描述
实现代码:

/* server.c */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <errno.h>
#include <ctype.h>#define SERV_PORT 9527void sys_err(const char *str)
{perror(str);exit(1);
}int main(int argc, char *argv[])
{struct sockaddr_in serv_addr, client_addr;socklen_t client_addr_len;char buf[BUFSIZ], client_IP[1024];//1. 创建监听套接字int lfd = socket(AF_INET,  //IPV4SOCK_STREAM, 0);if(lfd == -1) //check RETURN VALUE{sys_err("socket error");}//2. 绑定本地的IP地址和端口号serv_addr.sin_family = AF_INET;serv_addr.sin_port = htons(SERV_PORT);serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);int ret = bind(lfd,  (struct sockaddr *)&serv_addr, sizeof(serv_addr));if(ret == -1){sys_err("bind error");}//3. 设置监听int ret_listen = listen(lfd, 128);if(ret_listen == -1){sys_err("listen error");}//4. 阻塞等待,连接的到达,连接成功后返回通信用的套接字client_addr_len = sizeof(client_addr);int cfd = accept(lfd, (struct sockaddr*)&client_addr, &client_addr_len);if(cfd == -1){sys_err("accept error");}printf("client ip is %s, port is %d\n",inet_ntop(AF_INET, &client_addr.sin_addr.s_addr, client_IP, sizeof(client_IP)),ntohs(client_addr.sin_port));//5. 开始通信while(1){ssize_t ret_acc = read(cfd, buf, sizeof(buf));write(STDOUT_FILENO, buf, ret_acc);for(int i = 0; i < ret_acc; i++){buf[i] = toupper(buf[i]);}write(cfd, buf, ret_acc);}close(lfd);close(cfd);return 0;
}
/* client.c */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <errno.h>
#include <ctype.h>#define SERV_PORT 9527void sys_err(const char *str)
{perror(str);exit(1);
}int main(int argc, char *argv[])
{int cfd;struct sockaddr_in serv_addr;serv_addr.sin_family = AF_INET;serv_addr.sin_port = htons(SERV_PORT);inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr.s_addr);char buf[BUFSIZ];int cnt = 10;//1. 创建监听套接字cfd = socket(AF_INET, SOCK_STREAM, 0);if(cfd == -1) {sys_err("socket error");}int ret = connect(cfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr));if(ret != 0){sys_err("connect error");}while(cnt--){write(cfd, "hello\n", 6);ret = read(cfd, buf, sizeof(buf));write(STDERR_FILENO, buf, ret);sleep(1);}close(cfd);return 0;
}

实验现象
客户端向服务器发送10次hello,接收到服务器发来的10次大写HELLO;服务器首先打印IP地址和端口号,随后打印收到的10次由客户端传来的hello。
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 数学建模笔记——熵权法(客观赋权法)
  • 【卷起来】VUE3.0教程-05-侦听器
  • 南通网站建设手机版网页
  • HTML5好看的花店商城源码3
  • MySQL—死锁
  • 内网穿透的应用-本地化部署Elasticsearch平替工具OpenObserve并实现无公网IP远程分析数据
  • xilinx通用RAM或者FIFO设计
  • 直播相关01-录制麦克风声音,QT上 .pro 将 linux,mac和windows上配置为三种可以共享,
  • 【阿雄不会写代码】全国职业院校技能大赛GZ036第九套
  • 前端开发的单例设计模式
  • 内网穿透的应用-Deepin系统安装x11vnc实现任意设备无公网IP远程连接Deepin桌面
  • ITK-高斯滤波
  • 【数据结构与算法】——学习笔记
  • liunx io模型多路复用
  • 2024年【甘肃省安全员C证】报名考试及甘肃省安全员C证考试总结
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • CAP理论的例子讲解
  • es的写入过程
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • JAVA SE 6 GC调优笔记
  • JavaScript中的对象个人分享
  • Mac转Windows的拯救指南
  • MobX
  • MYSQL 的 IF 函数
  • nginx 负载服务器优化
  • PAT A1092
  • PHP的Ev教程三(Periodic watcher)
  • Redis在Web项目中的应用与实践
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 阿里云Kubernetes容器服务上体验Knative
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 回流、重绘及其优化
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 系统认识JavaScript正则表达式
  • 项目管理碎碎念系列之一:干系人管理
  • 学习笔记TF060:图像语音结合,看图说话
  • 一天一个设计模式之JS实现——适配器模式
  • 用简单代码看卷积组块发展
  • 原生Ajax
  • ​Redis 实现计数器和限速器的
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #数据结构 笔记一
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (每日一问)操作系统:常见的 Linux 指令详解
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (五)activiti-modeler 编辑器初步优化
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • .apk 成为历史!