C++ socket编程——3种方法发送不同类型的数据

socket传送数据,一般来讲是char型的,如何传送我们需要的数据类型勒?

1.结构体;2, Json序列化,3. 定义一个class。

1.结构体

相对来说简单点,看看网上的一个例子:

假设需要传送的结构体如下:

struct person{

char name[20];

int age;

float high;

};

可在发送数据的地方对数据进行处理,将其转换成一个字符串进行传送,而在接受方定义相同的结构体对这个字符串进行解析即可。

发送方代码如下:

char temp[100];    //传送的字符串

struct person p1; //声明一个需要传送的结构体

//以下是结构体的初始化信息

p1.age = 10;

p1.high = 1.80f;

strcpy(p1.name,"zhangsan",sizeof(p1.name));

memset(temp,0,sizeof(temp));  //对该内存段进行清 

memcpy(temp,&p1,sizeof(person));  //把这个结构体中的信息从内存中读入到字符串temp中

//接下来传送temp这个字符串就可以了

sendto(sock,temp,sizeof(person),0,(SOCKADDR*)&addSer,sizeof(SOCKADDR));

//这样这个结构体的信息就发送到addSer相应的套接字了

接收方代码如下:

同样需要定义字符串和相同的结构体对象

char temp[100];    //传送的字符串

struct person p2; //声明一个存放接收信息的结构体

memset(temp,0,sizeof(temp)); //清内存

//下面是接收字符串的代码

recv(clientSocket,temp,101,0);

//下面对字符串信息进行还原,将其变成我们的结构体数据

memcpy(&p2,temp,sizeof(person));  //解析过程,将字符串的内容写入到p2所在内存完成解析

下面就可以对p2中的数据进行各种操作了,也完成了结构体数据的传送。

2. Json序列化

很显然上面若是很复杂,结构体是不能够搞定的!Json序列化是一个好的东西。

从原理上来讲就是你在传递你的数据的时候。按照Json数据的key告诉他数据的类型,按照Json的value告诉数据的值。就这样,于是乎就可以传过去了。

C++需要一个jsoncpp的文件。具体的操作Google吧!

3.定义一个class

这是我今天上午发现的,原来定义一个类,再将它指针操作就可以发过去了。这种方法真是太帅了!

让我也想到,第一种方法也可以取地址发过去吧!!!

C++ socket编程——3种方法发送不同类型的数据

时间: 2024-08-09 22:02:38

C++ socket编程——3种方法发送不同类型的数据的相关文章

C语言编程 两种方法打印一个菱形(渐入显示)

<1>第一种方法,利用字符数组定义一个空格数组和一个符号数组, 然后找到数组中间的元素,操作空格字符从中间开始向两边与符号数组的元素互换, 每互换一次进行一次输出,打印上半个菱形和下半个菱形需要两个for语句的支持. 源代码如下: #include<stdio.h> #include<stdlib.h> #include<windows.h>//为了使用延时语句Sleep而调用 int main() { char suu1[] = "*******

多线程编程--5种方法实现线程同步

1:用Interlocked系列函数实现线程同步: 2:用CRITICAL_SECTION及其系列函数实现线程同步: 3:用RTL_SRWLOCK及其系列函数实现线程同步: 4:用事件内核对象实现线程同步: 5:用信号量内核对象实现线程同步:   1:用Interlocked系列函数实现线程同步实例如下: //旋转锁 #include <iostream> using namespace std; #include <process.h> #include <windows.

socket编程-客户端向服务器端发送某目录下的所有文件名

服务器端: import socket if __name__ == '__main__': server = socket.socket() server.bind(('127.0.0.1',9999)) server.listen() s1, raddr = server.accept() while True: data = s1.recv(1024) strdata = data.decode() if strdata == 'end': break print(strdata) #my

Java 网络编程 字符流的发送与接收 自定义数据边界

在网络编程中,客户端调用了flush方法,就会将缓存在字符流中的文本发送给服务器,服务器该怎样判断客户端发送的文本已经结束了呢? 我们先看一个例子: 客户端: import java.io.IOException; import java.io.PrintWriter; import java.net.InetSocketAddress; import java.net.Socket; import java.util.Scanner; /** * Created by 290248126 on

前台向后台传值的两种方法 以及 从后台获取数据的方法

1.前台向后台传值方法一: 表单提交的方式: 1 <form action="${path }/manage/logon.do" method="post" id="logonForm"> 2 <table cellpadding="0" cellspacing="0" border="0"> 3 <tr height="50">

socket编程的select模型

在掌握了socket相关的一些函数后,套接字编程还是比较简单的,日常工作中碰到很多的问题就是客户端/服务器模型中,如何让服务端在同一时间高效的处理多个客户端的连接,我们的处理办法可能会是在服务端不停的监听客户端的请求,有新的请求到达时,开辟一个新的线程去和该客户端进行后续处理,但是这样针对每一个客户端都需要去开辟一个新的线程,效率必定底下. 其实,socket编程提供了很多的模型来处理这种情形,我们只要按照模型去实现我们的代码就可以解决这个问题.主要有select模型和重叠I/o模型,以及完成端

Java Socket编程以及与Linux Socket API关系

Socket 编程(基于Linux) Socket独立于具体协议的网络编程接口,在ISO模型中,主要位于会话层和传输层之间:在通用的计算机网络五层模型中,主要位于应用层和传输层之间. Linux Socket 基本上就是BSD Socket 需要使用的头文件 数据类型:#include <sys/types.h> 函数定义:#include <sys/socket.h> Socket类型 套接字是一种通信机制,通信两方的一种约定,用套接字中的相关函数来完成通信过程.根据传输内容分为

Android应用开发提高篇(4)-----Socket编程(多线程、双向通信)(转载)

转自:http://www.cnblogs.com/lknlfy/archive/2012/03/04/2379628.html 一.概述 关于Socket编程的基本方法在基础篇里已经讲过,今天把它给完善了.加入了多线程,这样UI线程就不会被阻塞:实现了客户端和服务器的双向通信,只要客户端发起了连接并成功连接后那么两者就可以随意进行通信了. 二.实现 在之前的工程基础上进行修改就可以了. MyClient工程的main.xml文件不用修改,只需要修改MyClientActivity.java文件

Android数据存储的五种方法汇总

本文介绍Android中的5种数据存储方式. 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据 下面将为大家一一详细介绍. 第一种: 使用SharedPreferences存储数据 SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置