Windows平台下MingGW的网络socket编程模型

2023-11-18

Windows平台下MingGW的网络socket编程模型


1、TCP服务器

#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <winsock2.h>
#include <pthread.h>

#define LOCAL_IP      "192.168.31.254"
#define LOCAL_PORT    ((uint16_t)10126)

#define debug(...)                                     \
						do                             \
						{                              \
							printf(__VA_ARGS__);       \
							fflush(stdout);            \
						}while(0)



int main(void)
{
	int ret = 0;
	WSADATA ws;
	SOCKET sock, newsock;
	struct sockaddr_in local;
	struct sockaddr_in client;
	int addrlen = 0;
	int nrecv   = 0;
	char buf[512];

	if(WSAStartup(MAKEWORD(2, 2), &ws) != 0)
	{
		ret = -1;
		goto __exit;
	}

	sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if(sock == INVALID_SOCKET)
	{
		ret = -2;
		goto __exit;
	}

	local.sin_family = AF_INET;
	local.sin_addr.S_un.S_addr = inet_addr(LOCAL_IP);
	local.sin_port = htons(LOCAL_PORT);
	memset(local.sin_zero, 0X00, sizeof(local.sin_zero));

	if(bind(sock, (const struct sockaddr *)&local, sizeof(local)) == SOCKET_ERROR)
	{
		ret = -3;
		goto __exit;
	}

	listen(sock, 5);

	addrlen = sizeof(local);

	debug(" accept %s:%d...\r\n", LOCAL_IP, LOCAL_PORT);

	if((newsock = accept(sock, (struct sockaddr *)&client, &addrlen)) == SOCKET_ERROR)
	{
		ret = -4;
		goto __exit;
	}

	debug(" %s:%d connected\r\n", inet_ntoa(client.sin_addr), client.sin_port);

	while(1)
	{
		if((nrecv = recv(newsock, buf, sizeof(buf), 0)) <= 0)
			break;

		if(strncmp(buf, "quit", 4) == 0)
			break;

		if(send(newsock, buf, nrecv, 0) < 0)
			break;
	}

__exit:
	closesocket(sock);
	closesocket(newsock);
	return ret;
}

2、TCP客户端

#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <winsock2.h>
#include <pthread.h>

#define LOCAL_IP      "192.168.31.254"
#define LOCAL_PORT    ((uint16_t)10126)

#define debug(...)                                     \
						do                             \
						{                              \
							printf(__VA_ARGS__);       \
							fflush(stdout);            \
						}while(0)


int main(void)
{
	int ret = 0;
	WSADATA ws;
	SOCKET sock;
	struct sockaddr_in server;
	int nrecv   = 0;
	char buf[100];

	if(WSAStartup(MAKEWORD(2, 2), &ws) != 0)
	{
		ret = -1;
		goto __exit;
	}

	sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if(sock == INVALID_SOCKET)
	{
		ret = -2;
		goto __exit;
	}

	server.sin_family = AF_INET;
	server.sin_addr.S_un.S_addr = inet_addr(LOCAL_IP);
	server.sin_port = htons(LOCAL_PORT);

	if(connect(sock, (struct sockaddr *)&server, sizeof(struct sockaddr_in)) < 0)
	{
		ret = -3;
		goto __exit;
	}

	memset(buf, 'A', sizeof(buf));

	while(1)
	{
		if(send(sock, buf, sizeof(buf), 0) < 0)
			break;

		if((nrecv = recv(sock, buf, sizeof(buf), 0)) <= 0)
			break;

		if(strncmp(buf, "quit", 4) == 0)
			break;
	}

__exit:
	closesocket(sock);
	return ret;
}


ends…

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

Windows平台下MingGW的网络socket编程模型 的相关文章

  • 我可以使用什么 C++ 库在 Windows 上将 PDF 转换为图像?

    我正在开展一个需要分析图像的项目 这些图像的主要来源是网络摄像头 但最近我们被要求添加对上传文件和扫描仪的支持 这在大多数情况下都很好 只是他们希望我们能够使用 PDF 格式的文档 我需要一个原始像素位图进行处理 在 Mac 上 我可以使用
  • 在 Windows 上使用 PHP 进行分叉/线程的最佳方法是什么?

    我有一个 php 脚本 用于检查许多 数千个 网站上的更新 有时 随着站点数量的增加 情况会更频繁 我在更新其中一个站点时会遇到执行超时 整个脚本都会付诸东流 我能想到的最好的想法是分叉每个更新 所以如果它死了 整体更新就会继续 从我收集到
  • Windows 服务和 Windows 进程有什么区别?

    是什么不同之处窗户之间service和一个窗户process 服务是真正的 Windows 进程 没有区别 服务的唯一特殊之处在于它由操作系统启动并在单独的会话中运行 一种独立的方式 可防止其干扰桌面会话 传统上命名为daemon http
  • Windows Unicode C++ 流输出失败

    我目前正在编写一个应用程序 它要求我在任意窗口上调用 GetWindowText 并将该数据存储到文件中以供以后处理 长话短说 我注意到我的工具在 战地 3 上失败了 我将问题范围缩小到窗口标题中的以下字符 http www filefor
  • 批处理文件中的 %* 是什么意思?

    我见过的用法 在批处理文件和命令行中 有人可以解释一下的典型用法吗 有一个例子吗 它的意思是 命令行中的所有参数 例如 当您想要将命令行从批处理文件转发到另一个程序时 它非常有用 REM mybatchfile cmd echo You c
  • 同步通过 LAN 电缆连接的两台 Windows 7 计算机之间的时间

    我有许多笔记本电脑 它们运行我们的应用程序 同时通过以太网电缆成对连接 但未连接到任何外部网络或互联网 时间 我需要连接对来同步其系统时间 但由于每台计算机都需要能够与任何其他计算机同步 因此我无法将一台计算机定义为时间服务器 而另一台计算
  • 自动化 Windows UI 测试方法

    我们正在寻求设置自动化 UI 测试 并想知道最好的方法是什么 潜在的陷阱是什么 设置费用是否昂贵 提前致谢 B 自动化测试最大的消耗可能是时间 有很多非常昂贵的工具 但也有免费的工具 即使是昂贵的工具的成本也不太可能与正确设置自动化测试所需
  • 以系统帐户运行exe

    我正在尝试将我的 c exe 作为系统帐户运行 我怎样才能做到这一点 我试过了
  • Windows 通用应用程序串行端口无法打开,SerialDevice.FromIdAsync 始终为 null

    我正在尝试在 Windows 通用应用程序中使用串行端口 我一直在使用微软的串行示例应用程序作为模板 但是我遇到了一个相当奇怪的问题 var dis await DeviceInformation FindAllAsync SerialDe
  • 使用 Windows Media Foundation 枚举时如何获取硬件 ID

    我在用MFEnumDeviceSources 枚举连接的设备 我正在寻找一个已连接两个的特定网络摄像头 枚举工作正常 我可以打印友好名称这是FLIR Video对于我的两台相机 我正在努力弄清楚如何从 Media Foundation 设备
  • Windows 上任何单个进程可以寻址的最大内存量

    Windows 版本的内存限制 http msdn microsoft com en us library windows desktop aa366778 28v vs 85 29 aspx回答 Windows 上任何单个进程可以寻址的最
  • 捕获由纯 C++ dll 中的 MFC 应用程序生成的 Windows 消息

    首先 这可能吗 我有一个与某些硬件接口的第三方 dll 它是用MFC编写的 我 从 dll 供应商处 收到了一个示例 Visual Studio 2010 解决方案 该解决方案只有一个项目 调用相关第三方 dll 的 MFC 应用程序 ex
  • Windows下如何分配非分页内存

    当我使用 cudaHostAlloc 时 它将分配非分页 固定 页面锁定 内存 我想知道如何在没有 cuda 的情况下仅使用 Windows SDK 来做到这一点 None
  • IIS 或任何文件夹服务器 2012 R2 中不存在 adfs 目录的虚拟或物理位置

    我有一个完全可操作的联合身份验证服务器 Azure 同步 Office 365 同步和本地 配置的每个部分都完美运行 我遇到的问题是 没有任何 Web 目录文件的痕迹 我查看了每个位置 并且我的联合代理或联合服务器上不存在虚拟目录 我正在尝
  • 获取已连接 USB 设备的端口名称

    当USB设备连接到计算机时 如何使用C 代码获取它所连接的端口名称 我找到了很多方法来查找 USB 何时连接 断开 驱动器号 路径 设备 ID 等 但没有找到任何明确的示例来说明如何知道它连接到哪个端口 我看到了一种可能的解释 但这涉及很多
  • Mac 操作系统的 windows.h 替代品

    早上好 我正在使用 Codeblock c 程序进行编程 但是 我需要使用窗口 h and conio h MacBook 上没有这个头文件 拜托 你能帮我吗 不起作用的来源 void gotoxy int x int y COORD co
  • alter Windows 文件中的 krb5.ini 文件哪里去了?

    至少在 Windows XP 之前 如果您加入具有 Kerberos 领域特定设置的域 就会有一个 krb5 ini 文件 从 Vista 或 7 开始 不再需要此文件 我试图找到有关此的更多信息 但陷入困境 krb5 ini 文件中的设置
  • 从 Get-ChildItem -Path 返回对象数组

    从 powershell 开始 ls R txt将按目录递归列出文件 或者更好 PS gt Get ChildItem Path C Test Name logs anotherfile txt Command txt CreateTest
  • 链接到大地址感知 DLL

    假设我有一个使用 LARGEADDRESSAWARE 链接器标志集构建的 DLL 现在我有一个动态链接到该 DLL 的应用程序 这是否会使我的应用程序具有大型地址意识 如果不是 那么为任何 DLL 设置此标志是否有意义 讨论here htt
  • Windows 控制台“ESC[2J”并没有真正“清除”屏幕

    我知道这类问题经常被问到 但我认为这个问题有点不同 需要被问到 新的 Windows 控制台支持 ANSI VT100 控制代码 ANSI VT100 控制代码 http www termsys demon co uk vtansi htm

随机推荐

  • Python unicode equal comparison failed

    用python进行判断的时候 如果包含中文会报错 name 这里是中文 if i name print right 修改成 name 这里是中文 decode utf 8
  • 聊聊undefined 和 undeclared

    一 undefined 在Js中 有两个表示 空 的值undefined和null 其中比较有用的是 undefined undefined 是一个值为 undefined 的类型 JavaScript语言也定义了一个全局变量 它的值是 u
  • oracle存储过程----异常的写法介绍

    上一篇 oracle存储过程 case条件控制语句的用法 oracle存储过程 异常介绍 参考PL SQL 存储过程中的异常来自于程序本身 也有的来自开发人员自定义的数据 而所有的这些错误我们称之为异常 编译时的错误不能称为异常 esmp
  • kubeadm配置虚拟机k8s集群

    环境 centos7 vm pro windows terminal termius 虚拟机 硬件配置 2核2G 实验用 具体可根据电脑调整 配置3台 master01 node01 node02 通过克隆虚拟机直接复制 配置通一项以后建议
  • spark-submit 报错 Initial job has not accepted any resources

    spark submit 报这样的错误 WARN scheduler TaskSchedulerImpl Initial job has not accepted any resources check your cluster UI to
  • [pytest源码4]-pluggy之Plugin注册逻辑分析

    前言 本篇将详细对plugin的注册逻辑进行分析 个人拙见 有错请各位指出 如果的我的文章对您有帮助 不符动动您的金手指给个Star 予人玫瑰 手有余香 不胜感激 GitHub pluggy注册逻辑分析性 我们来详细分析一下plugin的注
  • 有道无术,术尚可求,有术无道,止于术

    有道无术 术尚可求 有术无道 止于术 老子 道德经 道和术在一直是一个引起人们广泛讨论的话题 古今中外许多人对此皆有见解 道和术放在道德和能力上来说 到底哪个更重要许多名人名言中都有阐述 1 因为道德是做人的根本 根本一坏 纵然使你有一些学
  • 一文精通常量池

    大家好 今天来和大家一起探索下Java的常量池 在阅读本篇之前 我为大家准备了一个测试 共15道判断题 每题1分 满分15分 大约花费1 2分钟时间 如果你全部答对了 那么恭喜你大神 本篇可能已经满足不了你了 如果结果不理想也不要气馁 读完
  • OpenCV进阶--图像变换(三)

    继上文 五 图像透视变换 首先透视变换是按照物体成像投影规律进行变换 即将物体重新投影到新的成像平面 在透视变换中 透视前的图像和透视后的图像之间的变换关系可以用一个3 3的变换矩阵表示 该矩阵可以通过两幅图像中4个对应点的坐标求取 因此透
  • 【Linux基础】stat函数

    stat函数 函数描述 获取文件属性 函数原型 include
  • iOS开发之数据存取(一)——SQLite

    概览 在iOS开发中数据存储的方式可以归纳为两类 一类是存储为文件 另一类是存储到数据库 例如前面IOS开发系列 Objective C之Foundation框架的文章中提到归档 plist文件存储 包括偏好设置其本质都是存储为文件 只是说
  • 计算机答卷方式 闭卷满分为90分,关于《计算机应用技术专业综合理论》考试说明.doc...

    计算机应用技术专业综合理论 考试大纲 一 考试性质 广东省高等职业院校对口自主招生考试是以中等职业技术学校对口专业应届毕业生和中等职业相关专业毕业 有两年以上实践经验的社会人员为对象的选拔性考试 二 考试内容 计算机应用技术专业综合理论 的
  • IDEA jdk 下载安装及项目中的配置

    进入 Oracle官网 的 Java 界面 Oracle官网地址 https www oracle com java 1 JDK下载 1 1 在网站页面滚动鼠标下拉定位到Java 选择Oracle JDK 1 2 选择Java archiv
  • Xcode警告、错误解决方法总结

    从sdk3 2 5升级到sdk 7 1中间废弃了很多的方法 还有一些逻辑关系更加严谨了 1 警告 xoxoxoxo is deprecated 解决办法 查看xoxoxoxo的这个方法的文档 替换掉这个方法即可 2 警告 Declarati
  • excel函数去重_Excel去除重复值方法汇总

    经常有人问到excel中去除重复值的问题 这个问题本来也一直有很多人讨论 现将做法汇总出来共大家参考 什么是重复值 顾名思义 重复值是指一组数据中有重复记录 去除这些重复的记录就叫去除重复值 具体有两种情况 源数据如图 去重后 结果一 所有
  • 蓝桥杯青少组python:第十三届省赛第一场

    选择题 1 下列二进制中最大数是 A 110 B 1010 C 1100 D 1001 2 以下方法 不是对文件读操作的是 A readline B readlines C readtext D read 3 以下对turtle库中函数描述
  • read_csv 与 to_csv方法

    1 read csv方法 1 1 返回数据类型 DataFrame 二维标记数据结构 列可以是不同的数据类型 是最常用的pandas对象 如同Series对象一样接受多种输入 lists dicts Series DataFrame Ser
  • JavaScript this关键字的理解

    JavaScript this 关键字的理解 仅供个人学习做笔记使用 大佬轻喷 1 全局环境直接输出this指向全局对象 console log this 2 全局函数输出this指向window 全局函数其实是window 全局对象 的方
  • 按键板的原理和实现--基于GPIO的按键板

    按键板的原理和实现 基于GPIO的按键板 上篇介绍简单的ADC实现 需要IC提供一个额外的ADC 但出于IC成本的考虑 无法提供这个的ADC时 但提供了多个额外的GPIO General Purpose Input Output 双向的 可
  • Windows平台下MingGW的网络socket编程模型

    Windows平台下MingGW的网络socket编程模型 1 TCP服务器 include