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

TCP简易通信实现

服务端

#include "sys/socket.h"
#include "sys/types.h"
#include "arpa/inet.h"
#include "stdio.h"
#include "unistd.h"
#include "string.h"
#include "stdlib.h"
#include "errno.h"int main (int argc, char* argv[])
{if(argc != 3){printf("Usage: %s <ip> <port>\n",argv[0]);exit(EXIT_FAILURE);}/*create socket*/int sockfd = socket(AF_INET,SOCK_STREAM,0);if(sockfd == -1){fprintf(stderr,"socket ERROR:%s\n",strerror(errno));exit(EXIT_FAILURE);}/*bind socket*/struct sockaddr_in addr;addr.sin_family = AF_INET;addr.sin_port = htons(atoi(argv[2]));//将主机字节序转为网络字节序大端,头文件为#include "arpa/inet.h"//addr.sin_addr.s_addr = argv[0];//INADDR_ANY是一个预定义的常量,其值通常为0,表示套接字将绑定到本机的所有IP地址上int exchange = inet_aton(argv[1], &addr.sin_addr);if(exchange == 0){printf("error inet_aton\n");exit(EXIT_FAILURE);}int ret_bind = bind(sockfd, (struct sockaddr *)&addr, sizeof(addr));if(ret_bind == -1){fprintf(stderr,"bind ERROR:%s\n",strerror(errno));exit(EXIT_FAILURE);}/*listen socket*/int listen_ret = listen(sockfd,5);if(listen_ret == -1){fprintf(stderr,"listen ERROR:%s\n",strerror(errno));exit(EXIT_FAILURE);}/* accept client */struct sockaddr_in client_addr;socklen_t len = sizeof(client_addr);int fd = accept(sockfd, (struct sockaddr *)&client_addr, &len);if(fd==-1){fprintf(stderr,"accept ERROR:%s\n",strerror(errno));exit(EXIT_FAILURE);}char buf[BUFSIZ]={0};while(1){memset(buf,0,BUFSIZ);ssize_t bytes_read = read(fd,buf,BUFSIZ);if(bytes_read==-1){fprintf(stderr,"read ERROR:%s\n",strerror(errno));exit(EXIT_FAILURE);}else{printf("recv:%s",buf);}}close(fd);close(sockfd);
}

客户端

#include "sys/socket.h"
#include "sys/types.h"
#include "arpa/inet.h"
#include "stdio.h"
#include "unistd.h"
#include "string.h"
#include "stdlib.h"
#include "errno.h"/*define area start*/
#define DEBUG 0
/*define area end*//*structure area start*/
/*structure area end*/
int main (int argc, char* argv[])
{if(argc != 3){printf("Usage: %s <ip> <port>\n",argv[0]);exit(EXIT_FAILURE);}/*create socket*/int sockfd = socket(AF_INET,SOCK_STREAM,0);if(sockfd == -1){fprintf(stderr,"socket ERROR:%s\n",strerror(errno));exit(EXIT_FAILURE);}/*bind socket*/struct sockaddr_in addr;addr.sin_family = AF_INET;addr.sin_port = htons(atoi(argv[2]));//将主机字节序转为网络字节序大端,头文件为#include "arpa/inet.h"
#if DEBUGaddr.sin_addr.s_addr = inet_addr("127.0.0.1");//INADDR_ANY是一个预定义的常量,其值通常为0,表示套接字将绑定到本机的所有IP地址上
#elseint exchange = inet_aton(argv[1], &addr.sin_addr);
#endifif(exchange == 0){printf("error inet_aton\n");exit(EXIT_FAILURE);}int ret_connect = connect(sockfd, (struct sockaddr *)&addr, sizeof(addr));if( ret_connect == -1){fprintf(stderr,"bind ERROR:%s\n",strerror(errno));exit(EXIT_FAILURE);}char buf[BUFSIZ]={0};while(1){printf("please input:\n");fgets(buf,BUFSIZ,stdin);int ret_write = write(sockfd,buf,strlen(buf));if(ret_write == -1){fprintf(stderr,"write ERROR:%s\n",strerror(errno));exit(EXIT_FAILURE);}}close(sockfd);
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【图像超分】论文精读:SeD: Semantic-Aware Discriminator for Image Super-Resolution
  • Feapder 爬虫集群部署指南
  • STM32-USART时序与寄存器状态分析
  • 【区块链+乡村振兴】森林食品认证溯源平台 | FISCO BCOS应用案例
  • Redis02——缓存(缓存更新策略、缓存穿透、缓存雪崩、缓存击穿、缓存工具封装)
  • Boost搜索引擎:项目整体代码及布局
  • 贝叶斯优化算法(Bo)与门控循环单元(GRU)结合的预测模型(Bo-GRU)及其Python和MATLAB实现
  • Haskell HTTP请求:如何解读响应状态
  • 片上POR和BOR的区别
  • 20240809 每日AI必读资讯
  • 大模型快速部署,以浪潮源2.0为例
  • linux中的库的概念、动态库与静态库
  • 如何在 Windows 11/10/8/7 中恢复已删除和未保存的记事本文本文件
  • 爬虫解析代码结构
  • 培训第二十一天(mysql用户创建与授权、角色创建)
  • C# 免费离线人脸识别 2.0 Demo
  • Gradle 5.0 正式版发布
  • Java 最常见的 200+ 面试题:面试必备
  • javascript面向对象之创建对象
  • Java多态
  • js中的正则表达式入门
  • laravel with 查询列表限制条数
  • Python学习之路16-使用API
  • Web Storage相关
  • webpack4 一点通
  • 工作中总结前端开发流程--vue项目
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 前端
  • 前端知识点整理(待续)
  • 全栈开发——Linux
  • 使用 Docker 部署 Spring Boot项目
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 数据仓库的几种建模方法
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • ​Java并发新构件之Exchanger
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • (2)空速传感器
  • (52)只出现一次的数字III
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (函数)颠倒字符串顺序(C语言)
  • (九)One-Wire总线-DS18B20
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (四)软件性能测试
  • (一)基于IDEA的JAVA基础12
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • ****Linux下Mysql的安装和配置
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 常见的偏门问题
  • .net 后台导出excel ,word
  • .Net程序帮助文档制作
  • .net打印*三角形