C/C++ 通过Socket 传输结构体
本质上socket无法传输结构体,我们只有将结构体装换为字节数组,或者是字符串格式来传输,到了服务端在强制类型转换一下即可,下面的代码分别提供原生写法与通过boost的实现两种,直接改改,可用于收集目标主机数据。
客户端:
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
typedef struct Info
{
char client_name[30];
char buffer[1024];
}message;
message msg;
void GetSysInfo()
{
SYSTEM_INFO sysInfo;
}
int main()
{
WSADATA WSAData;
SOCKET sock;
WSAStartup(MAKEWORD(2, 0), &WSAData);
sock = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in ClientAddr;
ClientAddr.sin_family = AF_INET;
ClientAddr.sin_port = htons(15001);
ClientAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
connect(sock, (LPSOCKADDR)&ClientAddr, sizeof(ClientAddr));
// 首先需要定义一个变量
char snd_buf[1024] = { 0 };
// 将数据拷贝到结构中
strcpy(msg.client_name, "lyshark");
strcpy(msg.buffer, "bbbbbb");
// 发送字节序
memcpy(snd_buf, &msg, sizeof(message));
send(sock, snd_buf, sizeof(snd_buf), 0);
closesocket(sock);
WSACleanup();
return 0;
}
服务端;
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
#define PORT 15001
#define ERROR 0
#define BUFFER_SIZE 1024
typedef struct Info
{
char client_name[30];
char buffer[1024];
}message;
int main()
{
WSADATA WSAData;
WSAStartup(MAKEWORD(2, 0), &WSAData);
SOCKET sock;
sock = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in ServerAddr;
ServerAddr.sin_family = AF_INET;
ServerAddr.sin_port = htons(PORT);
ServerAddr.sin_addr.s_addr = INADDR_ANY;
bind(sock, (LPSOCKADDR)&ServerAddr, sizeof(ServerAddr));
listen(sock, 10);
SOCKET msgsock;
// 用于接收结构
char buf[1024] = { 0 };
msgsock = accept(sock, (LPSOCKADDR)0, (int *)0);
recv(msgsock, buf, sizeof(buf), 0);
// 接收到结构,强制类型转换
message *msg = (message*)buf;
printf("%s \n", msg->client_name);
printf("%s \n", msg->buffer);
closesocket(sock);
WSACleanup();
system("pause");
return 0;
}
C/C++ 通过Socket 传输结构体的更多相关文章
- C#与C++通过socket传送结构体
C#服务端: using System; using System.Net.Sockets; using System.Net; using System.IO; using System.Diagn ...
- C与C# socket 跨平台通讯传输结构体
最近需要写一个C组成的服务器端与C#的客户端进行交互的软件,刚开始写的时候发现C#端解析时候出现了故障,经过仔细研究后发现原因是发送方传输太快,出现了所谓粘包的现象.也就是在C#端的Receive() ...
- socket发送结构体
struct send_info {char info_from[20]; //发送者IDchar info_to[20]; //接收者IDint info_length; //发送的消息主体的长度c ...
- Linux C Socket编程发送结构体、文件详解及实例
利用Socket发送文件.结构体.数字等,是在Socket编程中经常需要用到的.由于Socket只能发送字符串,所以可以使用发送字符串的方式发送文件.结构体.数字等等. 本文:http://www.c ...
- C# Socket 入门4 UPD 发送结构体(转)
今天我们来学 socket 发送结构体 1. 先看要发送的结构体 using System; using System.Collections.Generic; using System.Text; ...
- 2. socket结构体——表示socket地址
一.两种通用socket结构体 1. sockaddr struct sockaddr { sa_family_t sa_family; // 地址族 char sa_data[14]; // 存放s ...
- struct socket结构体详解
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://weiguozhihui.blog.51cto.com/3060615/15852 ...
- Socket 结构体
proto socket 关联结构: { .type = SOCK_STREAM, .protocol = IPPROTO_TCP, .prot = &tcp_prot, .ops = &am ...
- java socket传送一个结构体给用C++编写的服务器解析的问题
另一端是Java写客户端程序,两者之间需要通信.c++/c接收和发送的都是结构体,而Java是直接发送的字节流或者byte 数组.解决方法:c++/c socket 在发送结构体的时候其实发送的也是字 ...
- socket编程相关的结构体和字节序转换、IP、PORT转换函数
注意:结构体之间不能直接进行强制转换, 必须先转换成指针类型才可以进行结构体间的类型转换, 这里需要明确的定义就是什么才叫强制转换. 强制转换是将内存中一段代码以另一种不同类型的方式进行解读, 因此转 ...
随机推荐
- 【辅助工具】Postman使用
Postman使用 批量处理 https://www.bbsmax.com/A/A7zglyjoJ4/ pm.test("测试结果成功", function () { pm ...
- Spring Boot 自动配置注解源码解析
前言 为什么Spring Boot这么火?因为便捷,开箱即用,但是你思考过为什么会这么便捷吗?传统的SSM架构配置文件至少要写半天,而使用Spring Boot之后只需要引入一个starter之后就能 ...
- 一、redis单例安装(linux)
系列导航 一.redis单例安装(linux) 二.redis主从环境搭建 三.redis集群搭建 四.redis增加密码验证 五.java操作redis 环境:centos7.5需要的安装包: re ...
- webservice(AXIS)客户端生成方法
如何根据apache的axis生成的WebServices服务接口生成客户端代码一.下载axis-bin-1_4.zip 官网下载地址: https://mirrors.bfsu.edu. ...
- vim处理冲突文件
一.文件冲突前: 二.文件冲突后(默认为): 此时编辑文档,将before改为after但是异常退出了,此时编辑文档提示冲突: 回车进入展示编辑前的文档: ll-a可查看到隐藏文件的信息: 三.文件冲 ...
- springBoot 使用 @NotEmpty,@NotBlank,@NotNull 及@Valid注解校验请求参数
本文为博主原创,转载请注明出处: @NotEmpty,@NotBlank,@NotNull 这些注解所在的jar包路径在 javax.validation.constraints 的包下面,这个包下面 ...
- 【RTOS】基于RTOS的嵌入式系统看门狗策略
RTOS - high integrity systems 看门狗策略 Watchdog Strategies for RTOS enabled embedded systems 介绍 看门狗定时器就 ...
- [转帖]Linux系统安装之后,如何调节CPU性能策略
https://baize.cc/posts/efc.html#:~:text=Linux%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E4%B9%8B%E5%90%8E% ...
- [转帖]configure 各种配置
https://api.dandelioncloud.cn/article/details/1487329970564485121 -build=编译该软件所使用的平台 -host=该软件将运行的平台 ...
- 【转帖】通过docker配置DNS服务
https://blog.whsir.com/post-3185.html 在办公室开发人员经常会测试所写的页面,每次都要输入对应的IP地址或者更改hosts,为了让开发大爷省心,不如搭建一个dn ...