查看: 71|回复: 0

[转载图文] C/C++ 通过Socket 传输结构体

[复制链接]
发表于 2020-6-15 20:54:57 | 显示全部楼层 |阅读模式
  本质上socket无法传输结构体,我们只有将结构体装换为字节数组,或者是字符串格式来传输,到了服务端在强制类型转换一下即可,下面的代码,直接改改,可用于收集目标主机数据。
  客户端:
#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;
}


温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的最好奖励,还可以获得学币奖励,请尊重作者的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
论坛交流群:672619046
微信公众号
快速回复 返回顶部 返回列表