C/C++语言实现WiFi(socket)数据收发(客户端和服务端)

2023-11-19

目录

客户端(client)

服务端(server)


C/C++实现TCP通信、接收WIFI数据

编程环境:VC++6.0

 手机端:使用WiFi调试助手

 提示:整个过程在局域网中进行

很多编程语言都可以实现socket通信。

本博客将通过C/C++实现WiFi(socket)数据的收发,并将电脑端分别作为客户端和服务端实现。

客户端(client)

电脑端作为客户端,手机端作为服务端,电脑端程序需要设置手机端IP地址,和手机端的端口号。

经过查询

手机端的IP地址为:192.168.31.171

设置的端口号为:8080

所以电脑端程序修改如下:

//初始化 DLL
    WSADATA wsaData;
    WSAStartup(MAKEWORD(2, 2), &wsaData);
    //创建套接字
    SOCKET sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    //绑定套接字
    struct sockaddr_in sockAddr;
    memset(&sockAddr, 0, sizeof(sockAddr));  //每个字节都用0填充
    sockAddr.sin_family = PF_INET;
    sockAddr.sin_addr.s_addr = inet_addr("192.168.31.171");
    sockAddr.sin_port = htons(8080);
    connect(sock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR));
    // 设置接收空间
    char szBuffer[MAXBYTE] = { 0 };

在电脑端增加手机端IP地址和端口号PORT,然后循环接收手机端发来的数据,也可以向手机端发送数据。

while(1)
	{
		recvbyte = recv(sock, szBuffer, MAXBYTE, NULL);
		if (recvbyte < 0)
        {
            perror(" recv error. ");
            return -1;
        }
        else if (recvbyte == 0)
        {
            printf("client exit. \n");
            break;
        }
        else
        {
            szBuffer[recvbyte] = '\0';
            printf("Message form server: %s\n", szBuffer);
			bytes_sent = send(sock, message, strlen(message), 0);	//	数据发送
			// 存入数据库
        }
	}

需要启动手机端服务端,打开安装的WIFI调试助手。

运行电脑端C程序,连接手机端。

连接成功后,手机端会显示连接的电脑端IP和端口号。

电脑端IP查询:

 通信效果展示:

电脑端(client端)收到手机端(server端)发来的数据

手机端(server端)收到 电脑端(client端)发来的数据

可以发现电脑作为客户端,手机作为服务端 可以正常交互信息。

服务端(server)

电脑端作为服务端,手机端作为客户端,电脑端设置好自己本机IP和端口号。

经过查询

本机IP地址为:192.168.31.17

设置的端口号为:8080

电脑端程序如下:

//初始化 DLL
	WSADATA wsaData;
	WSAStartup(MAKEWORD(2, 2), &wsaData);
	//创建套接字
	SOCKET servSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
	//绑定套接字
	struct sockaddr_in sockAddr;
	memset(&sockAddr, 0, sizeof(sockAddr));  //每个字节都用0填充

	sockAddr.sin_family = AF_INET;
    sockAddr.sin_port = htons(8080);
    sockAddr.sin_addr.s_addr = inet_addr("192.168.31.17");

	bind(servSock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR));
	//进入监听状态
	listen(servSock, 20);
	//接收客户端请求
	SOCKADDR clntAddr;
	int nSize = sizeof(SOCKADDR);
	SOCKET clntSock = accept(servSock, (SOCKADDR*)&clntAddr, &nSize);
	
	char buf[128];
    int recvbyte;
	char *message = "Hello, WiFi!"; // 要发送的数据

 配置好服务端后,接下来就可以循环接收WiFi数据,也可以通过WiFi发送数据。

while (1)
    {
        recvbyte = recv(clntSock, buf, sizeof(buf), 0);		//	数据接收
        if (recvbyte < 0)
        {
            perror(" recv error. ");
            return -1;
        }
        else if (recvbyte == 0)
        {
            printf("client exit. \n");
            break;
        }
        else
        {
            buf[recvbyte] = '\0';
            printf(" buf :%s\n", buf);
			send(clntSock, message, strlen(message), 0);	//	数据发送
			// 存入数据库
        }
		
    }

接下来需要将电脑端程序运行,然后开启手机端WiFi调试助手,连接服务端。

连接成功后,电脑端接收手机端发来的数据。

 手机端也可以收到电脑端发来的数据,这样就实现了WiFi数据的互传。

源码连接:

C/C++语言实现WiFi(socket)数据收发(客户端和服务端)资源-CSDN文库

吾芯电子工作室

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

C/C++语言实现WiFi(socket)数据收发(客户端和服务端) 的相关文章

随机推荐

  • [Docker]使用Docker部署Kafka

    Kafka 是一个分布式流处理平台 它依赖于 ZooKeeper 作为其协调服务 在 Kafka 集群中 ZooKeeper 负责管理和协调 Kafka 的各个节点 因此 要在 Docker 容器中启动 Kafka 通常需要同时启动一个 Z
  • 对数器的简单使用

    对数器 1 前言 2 内容 简介对数器 以排序算法的检测为实例 3 总结 4 更新日志 1 前言 学习左神的数据结构的过程中 推荐使用对数器检验自己的算法是否正确 2 内容 简介对数器 1 对数器的作用 在一个题目未OJ的时候 可以通过对数
  • Transformer学习笔记

    一 Transformer诞生背景 Transformer模型是解决序列转录问题的一大创新 在Transformer模型之前 序列转录模型都或多或少的基于复杂的循环或卷积神经网络 循环神经网络的计算是时序性的 位置的计算必须基于之前所有位置
  • 微信小程序数据 \n 换行符失效解决办法

    最近遇到一个问题 使用uni app写小程序时 拿到一个字符串 后台返回的 需要在 n 处换行 但是直接使用 let title 黄鹤楼送 n孟浩然之广陵
  • 使用python对银行信息管理系统的简单实现

    一 首先是用户属性的类 class account object 储存用户信息的类 def init self id1 name tel money self id id1 账户 self name name 姓名 self tel tel
  • mo管理器java_Android开发之通过包管理器获取安装应用信息

    最近在自己写一个APP 有一个模块需要获取手机应用的一些信息 坑还是有 但都基本踩过了 自己把他实现了出来 实现方法还是很需要掌握的 底部弹出的对话框中四个选项的实现不多做说明 主要讲讲如何获取这些安装的应用信息 好了 不多说 看看效果图
  • 1024,干程序才懂得节日!

    1024程序员节 1024程序员节是广大程序员的共同节日 1024是2的十次方 二进制计数的基本计量单位之一 针对程序员经常周末加班与工作日熬夜的情况 部分互联网机构倡议每年的10月24日为1024程序员节 在这一天建议程序员拒绝加班 程序
  • 【C/C++】报错问题积累

    1 出现Deprecated declaration XXX give arg types c文件中 有没有参数的函数时 声明需要加void即 main c void fun main h void fun void
  • androidX 在AndroidMainfest里面加入provider后编译不通过

  • 【three.js练习程序】创建简单物理地形

  • ubuntu 18.04 双系统安装

    下载镜像 Ubuntu 18 04 6 LTS Bionic Beaver 磁盘分区用于ubuntu存储 在C盘中分出200M用于ubuntu的引导启动 C盘已经分出200M空间 D盘分配出160G用于存储文件 U盘制作系统盘 刻录软件 推
  • linux下TUN或TAP虚拟网卡的使用

    tun tap 驱动程序实现了虚拟网卡的功能 tun表示虚拟的是点对点设备 tap表示虚拟的是以太网设备 这两种设备针对网络包实施不同的封装 利用tun tap 驱动 可以将tcp ip协议栈处理好的网络分包传给任何一个使用tun tap驱
  • ClickHouse安装(集群版)

    ClickHouse安装 集群版 一 准备工作 1 设置hostname 2 hosts映射 3 关闭防火墙 4 同步时间 5 关闭selinux 6 安装好zookeeper 7 重启 二 搭建ClickHouse集群 1 下载安装包 2
  • c++类模板与继承详解

    c 类模板 继承 详解 类模板和类模板之间 类模板和类之间可以互相继承 它们之间的派生关系有以下四种情况 1 类模板继承类模板 2 类模板继承模板类 3 类模板继承普通类 4 普通类继承模板类 include
  • 【linux】shell 编程之字符串与数组

    前言 对字符串的操作在众多的编程语言中可以说是最基础的了 字符串 String 就是一系列字符的组合 字符串是 Shell 编程中最常用的数据类型之一 除了数字和字符串 也没有其他类型了 一 shell 中字符串的几种格式 在shell中
  • 吃透Chisel语言.18.Chisel模块详解(五)——Chisel中使用Verilog模块

    Chisel模块详解 五 Chisel中使用Verilog模块 上一篇文章讲述了用函数实现轻量级模块的方法 可以大幅度提升编码效率 Chisel中也提供了一些好用的函数 方便我们编写代码 也方便Chisel编译器优化生成的硬件电路 在Chi
  • Blender 之修改器代码分析

    转载 Blender 之修改器代码分析 KAlO2 博客园 Blender 之修改器代码分析 Blender的修改器 modifier 模块 默认界面右下块 Property 面板的扳手 分类 修改 生成 形变 模拟 列出所有的修改器 也可
  • 使用七牛云Python SDK来实现自动下载所有文件

    安装七牛云Python SDK 在终端中输入以下命令 pip install qiniu 连接七牛云存储 创建下载链接并下载文件 示例代码如下 import os from qiniu import Auth BucketManager 配
  • iOS和macOS上Swift编写的EOS区块链开源框架SwiftyEOS

    SwiftyEOS是一个用于与EOS交互的开源框架 用Swift编写 可以在iOS和macOS上使用 特点 EOS密钥对生成 私钥导入 签名哈希 基本的RPC API 链 历史 可查询客户端 交易 EOS token 转账 帮助类处理iOS
  • C/C++语言实现WiFi(socket)数据收发(客户端和服务端)

    目录 客户端 client 服务端 server C C 实现TCP通信 接收WIFI数据 编程环境 VC 6 0 手机端 使用WiFi调试助手 提示 整个过程在局域网中进行 很多编程语言都可以实现socket通信 本博客将通过C C 实现