可在发送数据的地方对数据进行处理,将其转换成一个字符串进行传送,而在接受方定义相同的结构体对这个字符串进行解析即可。
发送方代码如下:
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
这是我今天上午发现的,原来定义一个类,再将它指针操作就可以发过去了。这种方法真是太帅了!
让我也想到,第一种方法也可以取地址发过去吧!!!
具体思路可以参考我的博客——https://blog.csdn.net/new_one_object/article/details/51787002
https://blog.csdn.net/new_one_object/article/details/51787035
https://blog.csdn.net/new_one_object/article/details/51787057
具备的功能:
(1)聊天室服务器端能够接收多个客户端的连接请求
(2)聊天室服务器端具有处理“公聊”和“私聊”的功能;“公聊”所有客户端可见,私聊只有指定的“客户”可见
(3)聊天室客户端具有登陆对话框,通过输入用户名与服务器IP地址登陆到聊天室服务器端
(4)能够和聊天室的任何在线客户聊天,收发聊天信息,根据需要可以选择“公聊”或“私聊”
程序基于Visual Studio2010开发,以“MFC应用程序”作为程序开发模板。
原标题:
Socket
通信原理一、
Socket
通信简介Android与服务器的通信方式主要有两
种
:Http通信
Socket
通信两者的最大差异在于:Http连接使用的是“请求-响应方式”,即在请求时建立连接通道,当客户端向服务器
发送
请求后,服务端才能向客户端返回
数据
。
Socket
通信则是在双方建立连接后,可以直接进行
数据
的
传输
,在连接时可实现信息的主动推送,而不需要每次由客户端向服务器
发送
请求。那么,...
这个程序使用的是多线程机制+缓冲机制。
服务端会创建一个子线程来对应一个客户端,这样就可以实现多个客户端同时在线,客户端会有一个队列,用于循环读取的文件的缓冲机制。
这个程序默认是把接受的文件放在当前目录下的。
假设我们让
发送
数据
的一端总是以大端字节序
发送
(对就是做一个统一的规定),那么接收
数据
的一端就知道我接受到的字节序总是大端字节序,如果接受方的字节序为小端,那么只需要大端
数据
装换成小端字节序就可以了。因此,Linux定义了下面这个新的通用的
socket
地址结构体,这个结构体不仅提供了足够大的空间用于存放地址值,而且是
内存
对齐的【
内存
对齐可以加快CPU访问速度,
内存
对齐问题见我的C语言专栏,有详细介绍】
socket
本意上“插座”的意思,在Linux环境中,用于表示进程间网络通信的特殊文件
类型
。...
软件平台:win7 & VC6++
初学网络
编程
,经验也非常有限,项目要求我
传输
一个很大的bits流封装好的
数据
包,然而,我们用tcp协议的时候,其
传输
函数send函数的第二个参数是要一个char* 指针。那么怎么
传输
int* 或者 double*的数组怎么传过去呢。
其实很简单,send函数在传
数据
的时候,的确是一个字节一个字节的
传输
。那么我们把int*强制转换,
c/
c++
通过
socket
发送
结构可以直接先将结构转化到
内存
中,再通过send直接
发送
。 在网络通讯过程中往往涉及一些有关联的参数传递,例如数组,结构体之类的。对于结构体其实
方法
挺简单,由于结构体对象在
内存
中分配的空间都是连续的,所以可以将整个结构体直接转化成字符串
发送
,到了接收方再将这个字符串还原成结构体就大功告成了。 首先,我们建立一个结构体。 stru
在上一篇中我们介绍了Winsock的初始化
方法
,本文将介绍使用Winsock进行面向连接的一般
编程
方式。文中会给出
C++
和对应的C#代码。
Error控制
网络
编程
中对错误进行控制是非常重要的,因为你不知道什么时候会出现网络错误(如物理掉线、拥塞等,事实上它们经常出现,不用担心多数情况下的异常可以忽略不计,仍然可以在该套接字上进行通讯)。如果调用一个Winsock函数发生了错误,可以通...
套接字,就是一个指向
传输
提供者的句柄。Wi n 3 2中,套接字
不同
于文件描述符,所以它是一个独立的
类型
—S O C K E T。套接字是由两个函数建立的:
SOCKET
WSA
Socket
(int af,int type,int protocal,LPWSAPROTOCOL_INFO lpProtocolInfor,GROUP g,DWORD dwFlags);
SOCKET
sock
1. 什么是
socket
?
socket
的原意是“插座”,在计算机通信领域,
socket
被翻译为“套接字”,它是计算机之间进行通信的一
种
约定或一
种
方式。通过
socket
这
种
约定,一台计算机可以接收其他计算机的
数据
,也可以向其他计算机
发送
数据
。
1.1 UNIX/Linux 中的
socket
是什么?
在 UNIX/Linux 系统中,为了统一对各
种
硬件的操作,简化接口,
不同
的硬件设备也都被看成一个文件。对这些文件的操作,等同于对磁盘上普通文件的操作。