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

TCP Socket编程示例

介绍

本文主要学习TCP socket编程的代码。socket常用于客户端发起连接,服务端一般都会用一些高性能网络框架,不会让你手写socket服务端的。客户端代码基本都差不多。

服务端

server.cpp:

#include <iostream>
#include <unistd.h>
#include <arpa/inet.h>
#include <string.h>constexpr uint16_t port = 6000;int main() {int fd = socket(AF_INET, SOCK_STREAM, 0);   //创建用于监听的套接字if (fd < 0) {return -1;                              }sockaddr_in addr = {AF_INET, htons(port), 0};       //监听本机所有网络接口,并指定端口号if (bind(fd, (sockaddr*)&addr, sizeof(addr)) < 0) { //绑定close(fd);return -1;}if (listen(fd, 128) < 0) {  //开始监听;参数2:设置全连接(accept)队列长度return -1;}uint32_t addrLen = sizeof(addr);int cfd = accept(fd, (sockaddr*)&addr, &addrLen);   //阻塞等待,获取一条连接if (cfd < 0) {return -1;}//下面就是通信代码了//接收客户端消息char buf[1024] = {0};int size = recv(cfd, buf, sizeof(buf), 0); if (size <= 0) {return -1;  //<0:recv failed!    ==0:socket connect close!}std::cout << buf << std::endl;//向客户端发消息if (send(cfd, buf, strlen(buf), 0) < 0) {return -1;}close(cfd);close(fd);
}

客户端

client.cpp:

#include <iostream>
#include <unistd.h>
#include <arpa/inet.h>
#include <string.h>constexpr uint16_t port = 6000;
const std::string ip("127.0.0.1");int main() {int cfd = socket(AF_INET, SOCK_STREAM, 0);  //创建用于通信的socketif (cfd < 0) {return -1;}sockaddr_in addr = {AF_INET, htons(port), inet_addr(ip.c_str())};//对于客户端来说,这里要指定服务器的ip、portif (connect(cfd, (sockaddr*)&addr, sizeof(addr)) < 0) {         //连接return -1;}//发送消息char buf[1024] = "12345";if (send(cfd, buf, strlen(buf), 0) < 0) {return -1;}//接收消息int size = recv(cfd, buf, strlen(buf), 0);if (size <= 0) {return -1; //<0:recv failed!    ==0:socket connect close!}std::cout << buf << std::endl;close(cfd);
}

编译运行

g++ server.cpp -o server
g++ client.cpp -o client
./server
./client

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • c++模板初识
  • 【MySQL】根据binlog日志获取回滚sql的一个开发思路
  • 2024.7.19 作业
  • docker 操作
  • PHP宠物店萌宠小程序系统源码
  • 【EI检索】第二届机器视觉、图像处理与影像技术国际会议(MVIPIT 2024)
  • 掌握构建艺术:在Gradle中配置自定义的源代码管理(SCM)
  • web前端 Vue 框架面试120题(四)
  • 我去,怎么http全变https了
  • 【SpringBoot】单元测试之测试Service方法
  • IDEA性能优化方法解决卡顿
  • 目标检测算法
  • java设计模式:03-04-装饰器模式
  • CH03_布局
  • python-快速上手爬虫
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Android组件 - 收藏集 - 掘金
  • CEF与代理
  • co.js - 让异步代码同步化
  • conda常用的命令
  • DOM的那些事
  • Gradle 5.0 正式版发布
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • JavaScript 基础知识 - 入门篇(一)
  • KMP算法及优化
  • MYSQL 的 IF 函数
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • Otto开发初探——微服务依赖管理新利器
  • SQLServer之索引简介
  • vue:响应原理
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 翻译--Thinking in React
  • 模型微调
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 前端相关框架总和
  • 前端自动化解决方案
  • 全栈开发——Linux
  • 深入 Nginx 之配置篇
  • 思维导图—你不知道的JavaScript中卷
  • 用jQuery怎么做到前后端分离
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #ifdef 的技巧用法
  • (3)(3.5) 遥测无线电区域条例
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (三)Honghu Cloud云架构一定时调度平台