Linux下TCP编程

2023-10-31

服务器端在Linux环境下。

Server.cpp

#include <iostream>
//#include <WinSock2.h>
using namespace std;
enum{PORT=12345};

#ifdef _WIN32  //windows下
#include <WinSock2.h>
typedef int socklen_t;
#else      //Linux下
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
typedef unsigned int SOCKET;
#define  INVALID_SOCKET (SOCKET)(~0)
#define SOCKET_ERROR (-1)
#endif

int main()
{
#ifdef _WIN32   //windows项目下
	WSADATA wd; //套接字库信息结构体
	//参数1:套接字库版本号
	//参数2:输出参数,保存加载的套接字库的相关信息
	WSAStartup(0X0202,&wd);  //加载套接字
#endif
	//创建socket句柄
	SOCKET sock=socket(AF_INET,SOCK_STREAM,0);
	sockaddr_in sa={AF_INET,htons(PORT)};
	//句柄绑定到端口上
	int n=bind(sock,(sockaddr*)&sa,sizeof(sa));
	listen(sock,5); //侦听,参数2:等待连接队列的最大长度
	socklen_t nLen=sizeof(sa);
	//int nLen=sizeof(sa);  ******windows下
	while(true)
	{
		//等待客户端的连接
		SOCKET socka=accept(sock,(sockaddr*)&sa,&nLen);
		cout<<inet_ntoa(sa.sin_addr)<<"-"<<htons(sa.sin_port)<<"登陆"<<endl;
		while(true)
		{
			char s[2048];
			//接收数据
			n=recv(socka,s,sizeof(s),0);
			if(n<=0) //未接收到数据时
				break;
			s[n]=0;
			cout<<s<<endl;
		}
		cout<<inet_ntoa(sa.sin_addr)<<"-"<<htons(sa.sin_port)<<"退出"<<endl;
	}

	return 0;
}


客户端在Windows环境下:

Client.cpp

#include <iostream>
#include <WinSock2.h>
using namespace std;
enum{PORT=12345};

int main()
{
	WSADATA wd;
	WSAStartup(0x0202,&wd);
	SOCKET sock=socket(AF_INET,SOCK_STREAM,0);
	sockaddr_in sa={AF_INET,htons(PORT)};
	sa.sin_addr.s_addr=inet_addr("192.168.1.5");  //Linux和windows下均可
	//sa.sin_addr.S_un.S_addr=inet_addr("192.168.1.5");   //windows下
	//通过sa连接服务器
	int n=connect(sock,(sockaddr*)&sa,sizeof(sa)); 
	if(n<0)
	{
		cout<<GetLastError()<<endl;
		//cout<<errno<<endl;  ***Linux下
		return -1;
	}
	char s[2048];
	while(true)
	{
		cout<<"请输入你要发送的文字[#退出]";
		cin>>s;
		if('#'==s[0])
			break;
		send(sock,s,strlen(s),0);
	}
	return 0;
}





先在Linux下编译Server.cpp,运行(服务端,Linux本机地址为192.168.1.5)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux下TCP编程 的相关文章

  • 如何在文件夹中的 xml 文件中 grep 一个单词

    我知道我可以使用 grep 在这样的文件夹中的所有文件中查找单词 grep rn core 但我当前的目录有很多子目录 我只想搜索当前目录及其所有子目录中存在的所有 xml 文件 我怎样才能做到这一点 我试过这个 grep rn core
  • 比较linux中的两个未排序列表,列出第二个文件中的唯一项

    我有 2 个包含号码列表 电话号码 的文件 我正在寻找一种列出第二个文件中第一个文件中不存在的数字的方法 我尝试过各种方法 comm getting some weird sorting errors fgrep v x f second
  • 运行 shell 命令并将输出发送到文件?

    我需要能够通过 php 脚本修改我的 openvpn 身份验证文件 我已将我的 http 用户设置为免通 sudoer 因为这台机器仅在我的家庭网络中可用 我目前有以下命令 echo shell exec sudo echo usernam
  • Visual Studio - X11:缺少 DISPLAY 环境变量

    我正在使用 Visual Studio 2019 Enterprise 开发跨平台 Windows Linux x64 GUI 应用程序 在这个 2019 版本中 我们可以使用 Visual Studio调试平台 Windows 本机 和
  • 如何在特定的Java版本上运行应用程序?

    如何运行具有特定 Java 版本的应用程序 我安装了三个 Java 版本 myuser mysystem sudo update alternatives config java There are 3 choices for the al
  • pthread_self() 返回的线程 ID 与调用 gettid(2) 返回的内核线程 ID 不同

    这句话来自于pthread self 的手册页 http linux die net man 3 pthread self 那么 我应该根据什么来决定是否应该使用pthread self or gettid确定哪个线程正在运行该函数 两者都
  • Grep 递归和计数

    需要在具有大量子目录的目录中搜索文件内的字符串 我在用着 grep c r string here 我怎样才能找到总数量 如何仅输出至少具有一个实例的文件 使用 Bash 的进程替换 这给出了我认为是您想要的输出 如果不是 请澄清问题 gr
  • 由于 abi::cxx11 符号导致的链接问题?

    我们最近收到一份报告 因为GCC 5 1 libstdc 和双 ABI http gcc gnu org onlinedocs libstdc manual using dual abi html 它似乎Clang 不知道 GCC 内联名称
  • 如何通过不同的接口路由 TCP/IP 响应?

    我有两台机器 每台机器都有两个有效的网络接口 一个以太网接口eth0和 tun tap 接口gr0 目标是使用接口在机器 A 上启动 TCP 连接gr0但然后让机器 B 的响应 ACK 等 通过以太网接口返回 eth0 因此 机器 A 发出
  • 如何使用 VSCode 调试 Linux 核心转储?

    我故意从我使用 VSCode 编写的 C 应用程序生成核心转储 我不知道如何调试核心转储 有没有人愿意分享这方面的经验 更新 我相信我现在已经可以使用了 我为核心文件创建了第二个调试配置 我需要添加指向生成的转储文件的 coreDumpPa
  • 为什么使用signalfd无法捕获SIGSEGV?

    我的系统是ubuntu 12 04 我将示例修改为man 2 signalfd 并添加sigaddset mask SIGSEGV 在示例中 但我无法得到输出SIGSEGV被生成 这是一个错误吗glibc 源代码片段如下 sigemptys
  • C++ Linux GCC 应用程序中的 GUID

    我有很多服务器运行这个 Linux 应用程序 我希望他们能够生成一个碰撞概率较低的 GUID 我确信我可以从 dev urandom 中提取 128 个字节 这可能没问题 但是有没有一种简单易用的方法来生成与 Win32 更等效的 GUID
  • 如何将命令输出作为多个参数传递给另一个命令

    我想将命令的每个输出作为多个参数传递给第二个命令 例如 grep pattern input returns file1 file2 file3 我想复制这些输出 例如 cp file1 file1 bac cp file2 file2 b
  • GCC 详细模式输出解释

    我是 Linux 新手 谁能向我解释一下我的 hello world 程序的以下详细模式输出 另外 这些文件是做什么用的crt1 o crti o crtend o crtbegin o and crtn o and lc and lgcc
  • 用于 e NetworkManager VPN 连接的 dbus 信号处理程序

    我需要开发一些在建立 VPN 连接时执行的 python 代码 VPN 由 NetworkManager 控制 我试图弄清楚如何为此使用 NM DBUS 事件 使用 dbus monitor system 我能够识别连接信号 signal
  • 点击界面没有出现

    我决定添加一个点击界面并在我的代码中使用它 但我能够得到它的状态 sudo ip f link tuntap add tap10 mode tap sudo ip link set tap10 up 之后当我执行 ip link 时 tap
  • Linux 上的“软/硬 nofile”是什么意思

    当我尝试在RedHat EL5上安装软件时 我得到了错误 软 硬nofile的期望值是4096 而默认值是1024 我设法增加了这个数字 但我不知道参数是什么 他们指的是软链接和硬链接吗 我改变的方法是 a 修改 etc security
  • 删除 Python 中某些操作的 root 权限

    在我的 Python 脚本中 我执行了一些需要 root 权限的操作 我还创建并写入文件 我不想由 root 独占所有 而是由运行我的脚本的用户独占所有 通常 我使用以下命令运行脚本sudo 有办法做到上述吗 您可以使用以下方式在 uid
  • 在Linux中创建可执行文件

    我计划做的一件事是编写 非常简单的 Perl 脚本 并且我希望能够在不从终端显式调用 Perl 的情况下运行它们 我明白 要做到这一点 我需要授予他们执行权限 使用 chmod 执行此操作非常简单 但它似乎也是一个稍微费力的额外步骤 我想要
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似

随机推荐

  • 基于IMU和超声的3D手势识别笔

    随着科技的发展 人机交互在商业中有了越来越多的应用 面对日益复杂的交互场景 手势识别逐渐成为虚拟现实等相关应用的主要交互手段 3D手势识别是一个具有挑战性的问题 常用的手势传感器有三种基本类型 多点触摸屏传感器 基于视觉的传感器和基于安装的
  • 微信小程序(订阅消息)

    小程序模板消息即将被废弃掉 于是有了新接口wx requestSubscribeMessage 订阅消息文档 步骤 1 获取用户openid access token 前面文章提到过 2 获取模板 ID 3 获取下发权限 api 4 发送订
  • 【项目】前端实习——后端接口数据获取与渲染

    后端数据获取与渲染 接口联调 数据渲染 挂载 生命周期 数据更新 实习项目开发与自己平时练习的项目最大的不同就是有接口数据 通过发起一定的请求获取到后端的数据 接口联调 在后端部署好后 通过网络请求去获取数据 前面我们已经定义好一些死的数据
  • uboot环境变量分析

    项目情景 最近我在一个新平台的开发过程中遇到烧录问题 具体的问题是使用原厂提供的烧录脚本烧录成功 但是固件却没有更新 其中kernel和dtb烧录指令如下 adnl exe Partition M mem P 0x1000000 F lin
  • BOA 调用 CGI 原理

    文章目录 BOA 调用 CGI 原理 BOA 调用 CGI 原理 环境 arm7 i mx6ul 源码 boa 0 94 13 boa 移植以及怎么使用CGI网上有很多示例 但是找不到原理相关的 今天项目中有关用到 就看了下源码 首先我们用
  • Redis闲谈(1):构建知识图谱

    场景 Redis面试 图片来源于网络 面试官 我看到你的简历上说你熟练使用Redis 那么你讲一下Redis是干嘛用的 小明 心中窃喜 Redis不就是缓存吗 redis主要用作缓存 通过内存高效地存储非持久化数据 面试官 Redis可以用
  • deadline调度器

    Linux内核中定义了5个调度器类 分别对应5个调度器 调度优先级顺序由高到低依次为 stop sched class dl sched class rt sched class fair sched class idle sched cl
  • Qt学习日志2021_08_20

    Qt学习日志2021 08 20 Qt项目的创建 为了做一个Qt的项目 先来学习学习 今天时间不多 先做一些简单的了解 创建项目很简单 安装好Qt之后 就可以根据提示创建了 要注意 不能路径有中文 项目名称也不能有中文 空格等 上面还有很多
  • C++STL读写锁、普通锁(shared_mutex、mutex)效率对比

    define READER CNT 8 define LOOP COUNT 5000000 include
  • 使用国内镜像网站解决github clone速度慢问题

    问题描述 我从github clone一些项目的时候速度极慢 有时候clone到一半还会失败 简直令人抓狂 快速克隆github项目插件 解决步骤 1 使用国内镜像网站 目前已知Github国内镜像网站有github com cnpmjs
  • mysql如何添加一个表的外键

    作者 别先生 博客园 https www cnblogs com biehongli CSDN https blog csdn net Biexiansheng 如果您想及时得到个人撰写文章以及著作的消息推送 可以扫描上方二维码 关注个人公
  • 前缀和&差分

    前缀和 能快速求出来一段数的和 比如说从 l r 的和 可以说是最大的应用 是个很重要的技巧 下标从1开始 二维前缀和 leedcode练习 724 寻找数组的中心下标 思路 记数组的全部元素之和为 total 当遍历到第 i 个元素时 设
  • angular知识点--@output()

    子组件向父组件传递数据 output 碎碎念 这是一个非常笨的开发 这也是第一次写博客 目的是想在学习angular知识的过程中把一些知识点记下来 如果能帮助到需要的人 也是一件好事 都是一些自己在学习过程中的一点体会 如果有什么不对的感谢
  • 解决 Deepin V20、Ubuntu 20.04、Linux Mint 20 声卡无法识别导致的没有声音

    简述 随着 Linux kernel 5 4 稳定版的发布 各个主流的 Linux 发行版也都将最新发行版的默认内核都设置为了 5 4 往往内核一升级就会带来各种问题 这不这个最近在物理机上尝试了几个自己喜欢的发行版 标题所列 均出现了声卡
  • 暗影精灵5 (i7 9750H + RTX2060) 安装win10+Ubuntu18.04双系统

    电脑型号 hp 暗影精灵5 Air 显卡 RTX 2060 CPU i7 9750H 硬盘 500G固态 安装的启动方式 UEFI 这个电脑比较新 安装时有很多坑 建议使用18 04 3版本的镜像 本人一开始使用18 04 2安装失败了 安
  • ssh免密钥登录失败原因排查

    最近多次遇到不同原因导致ssh免密钥登录的问题 明明都配置好了 但是就是不通 这里记录一下排查问题的思路 作为备忘 具体如何配置 网上文章很多 这里就不再重复 查看debug日志很关键 客户端 参数加 v 比如ssh v xxx com 服
  • 服务器的基本信息,服务器基本信息

    服务器基本信息 内容精选 换一换 华为云提供两种连接方式通过SQL Server客户端连接实例 非SSL连接和SSL连接 其中 SSL连接实现了数据加密功能 具有更高的安全性 准备弹性云服务器通过内网连接华为云关系型数据库实例 您需要购买一
  • northgard如何修改服务器,Northgard八项修改器(Northgard游戏修改助手)V2.3.3.18897 免费版...

    Northgard八项修改器 Northgard游戏修改助手 是一款很好用的针对Northgard游戏制作的修改辅助工具 小编推荐的这款Northgard八项修改器功能强大 使用后可以修改游戏属性 帮助玩家体验到更多精彩的游戏内容 修改器可
  • (力扣23)合并排序链表,采用分治思想

    题目 给定一个链表数组 每个链表都已经按升序排列 请将所有链表合并到一个升序链表中 返回合并后的链表 什么是归并排序 归并排序的时间复杂度仅次于快排 归并排序算法每次将序列折半分组 共需要logn轮 因此归并排序算法的时间复杂度是O nlo
  • Linux下TCP编程

    服务器端在Linux环境下 Server cpp include