Socket编程中如何发送结构体,拼接多次接收消息及获取通信双方地址

客户端:

#include <iostream>
#include <stdio.h>
#include <string>
#include "winsock.h"
#pragma comment(lib, "wsock32")

using namespace std;

#define COMMAND 100

int main()
{
	int ret = 0;

	WSADATA wsadata;
	WORD version = MAKEWORD(2,0);
	ret = WSAStartup(version,&wsadata);

	SOCKET m_hClientSocket;
	m_hClientSocket = socket(AF_INET,SOCK_STREAM,0);

	SOCKADDR_IN m_addr1;
	m_addr1.sin_family = AF_INET;
	m_addr1.sin_addr.S_un.S_addr = inet_addr("192.168.100.57");
	m_addr1.sin_port = htons(10000);
	ret = connect(m_hClientSocket,(LPSOCKADDR)&m_addr1,sizeof(m_addr1));

	char Clisend_msg[] = "我是客户端,请问你是那位?";
	//char Clisend_msg[] = "hello, I am a client, and who are you?";
	int len_send = send(m_hClientSocket,Clisend_msg,sizeof(Clisend_msg),0);

	//利用字符串发送,规定好字符串格式在服务器端接收后进行解析
	/*char send_buf[1024] = "tony  2
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C语言,可以使用动态内存分配和结构体数组来一次性接收数据库查询返回的多条记录。以下是一种实现方法: 首先,定义一个结构体来表示数据库查询记录的结构,比如: ```c struct Record { int id; char name[20]; int age; }; ``` 然后,声明一个结构体数组指针以及一个变量来存储记录的数量,例如: ```c struct Record *records; int numRecords; ``` 接下来,执行数据库查询操作,并获取到记录的数量,例如: ```c // 假设从数据库获取到numRecords的值 // 动态分配足够的内存来存储多条记录 records = (struct Record*)malloc(numRecords * sizeof(struct Record)); // 检查内存分配是否成功 if (records == NULL) { printf("内存分配失败\n"); return; } // 循环接收每条记录的字段值 for (int i = 0; i < numRecords; i++) { // 假设从数据库获取到id、name和age字段的值 int id = ...; char name[20] = ...; int age = ...; // 将获取到的字段值存储到结构体数组 records[i].id = id; strncpy(records[i].name, name, sizeof(records[i].name)); records[i].age = age; } ``` 完成数据库查询后,就可以通过指针遍历结构体数组并访问每条记录的字段值。 最后,记得在不再需要使用结构体数组时,使用`free()`函数释放动态分配的内存,以避免内存泄漏: ```c free(records); ``` 这样,就可以使用动态内存分配和结构体数组一次性接收数据库查询返回的多条记录。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值