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

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

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

相关文章

[CP_AUTOSAR]_分层软件架构_接口之通信模块交互介绍

目录 1、协议数据单元(PDU)传输2、通信模块的案例2.1、SDU、 PCI & PDU2.2、通信模块构成2.3、从数据传输的角度看Communication2.4、Communication中的接口 在前面 《关于接口的一些说明》 以及  《Memory软件模块接口说明》 中&#xff0c;简要介绍了CP_AUTOSAR分层…

ByteBuf释放注意的问题

Bytebuf需要释放&#xff0c;否则可能导致OOM。 如果bytebbuf传递到了head或tail&#xff0c;不需要我们关心。 在head和tail里&#xff08;head实现了outhandler、inhander。tail实现了inhander&#xff09;&#xff0c;底层自动调用了bytebuf.release。 其他情况需要我们手动…

MySQL(终章)视图, 用户管理, C连接MySQL.

目录 1.视图; 2.用户管理; 1.视图: 1.1 概念和基本操作: 视图本质就是表结构, 虚拟表. 视图和基表数据的改变都会相互影响. 创建视图语法: create view 视图名 as select语句&#xff1b; 修改视图: update set ; 删除视图: drop view 视图名&#xff1b; 1. 2 视图使用规则: …

集成学习的艺术:使用Scikit-Learn实现模型融合

集成学习的艺术&#xff1a;使用Scikit-Learn实现模型融合 在机器学习领域&#xff0c;集成学习是一种强大的技术&#xff0c;它通过结合多个模型的预测来提高整体性能。Scikit-Learn&#xff08;简称sklearn&#xff09;&#xff0c;作为Python中最受欢迎的机器学习库之一&am…

IP地址:由电脑还是网线决定?

IP地址&#xff1a;由电脑还是网线决定&#xff1f; 在互联网时代&#xff0c;IP地址是我们进行网络通信的基础。然而&#xff0c;对于IP地址究竟是由电脑决定还是由网线决定的问题&#xff0c;不少人可能存在疑惑。本文将从IP地址的定义、分配方式以及影响因素等方面进行探讨…

减分兔搜题-12123学法减分20题目及答案 #媒体#职场发展

对于即将参加驾驶考试的朋友来说&#xff0c;掌握一些经典题目和答案至关重要。今天&#xff0c;我就为大家带来了这样一份干货——20道驾驶考试题目和答案&#xff0c;助你轻松应对考试&#xff01;这些题目不仅包括了考试中常考的内容&#xff0c;还有针对难点和重点的详细解…

时序数据库-02-聊一聊时序数据库

时序数据库系列 时序数据库-01-时序数据库有哪些&#xff1f;为什么要使用 时序数据库-02-聊一聊时序数据库 时序数据库-03-pentsdb-分布式时序数据库 时序数据库-04-InfluxData-分布式时序数据库 时序数据库-05-TDengine 是一款开源、高性能、云原生的时序数据库 (Time-S…

ETL数据同步之DataX,附赠一套DataX通用模板

今天跟大家分享数据同步datax的模板&#xff0c;小伙伴们简单直接借鉴使用。 还记得上一篇关于大数据DS调度工具的分享嘛&#xff1f; 主流大数据调度工具DolphinScheduler之数据ETL流程-CSDN博客 里面的核心就是采用了DATAX的数据同步原理。 一&#xff0c;什么是DataX D…

基于luckysheet实现在线电子表格和Excel在线预览

概述 本文基于luckysheet实现在线的电子表格&#xff0c;并基于luckyexcel实现excel文件的导入和在线预览。 效果 实现 1. luckysheet介绍 Luckysheet &#xff0c;一款纯前端类似excel的在线表格&#xff0c;功能强大、配置简单、完全开源。 官方文档在线Demo 2. 实现 …

华为云.VPC关联概念与对等连接实践

云计算.华为云 VPC关联概念与对等连接实践 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/q…

AWS全服务历史年表:发布日期、GA和服务概述一览(一)

我一直在尝试从各种角度撰写关于Amazon Web Services&#xff08;AWS&#xff09;的信息和魅力。由于我喜欢技术历史&#xff0c;这次我总结了AWS服务发布的历史年表。 虽然AWS官方也通过“Whats New”发布了官方公告&#xff0c;但我一直希望能有一篇文章将公告日期、GA日期&…

Java流的奥秘:字节与字符的交响乐章

在Java编程的广阔天地中&#xff0c;数据的流动如同一条条看不见的河流&#xff0c;滋养着程序的生命力。而流(Stream)作为数据传输的核心机制&#xff0c;承载着数据的读写重任。今天&#xff0c;我们将深入探讨字节流与字符流的精妙之处&#xff0c;解锁它们背后的编程艺术。…

视频监控平台LntonCVS视频融合共享平台智慧安防视频监控汇聚应用方案

LntonCVS是一款功能强大且灵活部署的安防视频监控平台。它支持多种主流标准协议&#xff0c;包括GB28181、RTSP/Onvif、RTMP等&#xff0c;同时能够兼容海康Ehome、海大宇等厂家的私有协议和SDK接入。该平台不仅提供传统的安防监控功能&#xff0c;还支持接入AI智能分析&#x…

无人机之产业链篇

无人机产业链上游为无人机设计研发及关键原材料的生产&#xff0c;其中关键原材料有金属材料和复合材料两大类&#xff0c;包括钛合金、铝合金、陶瓷基等特殊材料 中游无人机整机制造包括飞行系统、地面系统、任务载荷系统三个方面&#xff0c;是无人机制造的核心部分&#xf…

Adobe国际认证详解-网页设计认证专家行业应用场景解析

在当今数字化时代&#xff0c;网页设计已成为各行各业不可或缺的一环。而网页设计认证专家&#xff0c;作为经过Adobe国际认证体系严格考核的专业人才&#xff0c;正逐渐成为行业内炙手可热的存在。他们凭借深厚的网页设计理论基础和实践经验&#xff0c;为各行各业提供了高质量…

144. 字典序最小的 01 字符串(卡码网周赛第二十六期(23年阿里淘天笔试真题))

题目链接 144. 字典序最小的 01 字符串&#xff08;卡码网周赛第二十六期&#xff08;23年阿里淘天笔试真题&#xff09;&#xff09; 题目描述 小红有一个 01 字符串&#xff0c;她可以进行最多 k 次提作&#xff0c;每次操作可以交换相邻的两个字符&#xff0c;问可以得到的…

java设计模式:03-06-享元模式

享元模式&#xff08;Flyweight Pattern&#xff09; 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;它通过共享技术来有效地支持大量细粒度对象的重用。享元模式避免了在相似对象间的高开销&#xff0c;通过共享尽可能多的状态来尽量减…

正则表达式:电子邮件地址的格式详解,及常见正则表达式符号的详细解释和匹配方式

一、第一部分是对该段电子邮件的详解 var Regex /^(?:\w\.?)*\w(?:\w\.)*\w$/; 1.^&#xff1a;这个符号表示匹配输入字符串的开始位置。 2.(?:...)&#xff1a;这是一个非捕获组&#xff08;non-capturing group&#xff09;&#xff0c;用于将正则表达式的一部分组合在…

B端产品经理能力培养(四)

B端产品经理能力模型 通用能力 学习能力 沟通能力 行业融入感主人翁精神 心态和情商 专业素养 责任心 自驱力、执行力 基础认知 产品行业认知&#xff1a;当前公司的产品所属细分领域、所处行业趋势、提供怎样的服务、产品和方案解决了客户哪些问题。 产品聚焦领域&a…

【Langchain大语言模型开发教程】模型、提示和解析

&#x1f517; LangChain for LLM Application Development - DeepLearning.AI 学习目标 1、使用Langchain实例化一个LLM的接口 2、 使用Langchain的模板功能&#xff0c;将需要改动的部分抽象成变量&#xff0c;在具体的情况下替换成需要的内容&#xff0c;来达到模板复用效…