自己定义的结构体。怎么在socket中传送和接收阿
比如
typedef struct myStr
{
char str[100];
int i;
double m,
CString mystring;
}mystr,*mystr;
结构体如何进入send()函数,recv函数又如何接收并提取出来啊~~~在线等
谢谢先~
比如
typedef struct myStr
{
char str[100];
int i;
double m,
CString mystring;
}mystr,*mystr;
结构体如何进入send()函数,recv函数又如何接收并提取出来啊~~~在线等
谢谢先~
#define ENTITY_TYPE(a) ((a*)NULL), __false_type()#include "ISerial.h"
#include <STRING>
#include <VECTOR>
#include <MAP>
#include <stl/type_traits.h>#ifndef sint8typedef signed __int8 sint8;
typedef unsigned __int8 uint8;
typedef signed __int16 sint16;
typedef unsigned __int16 uint16;
typedef signed __int32 sint32;
typedef unsigned __int32 uint32;
typedef signed __int64 sint64;
typedef unsigned __int64 uint64;typedef int sint; // at least 32bits (depend of processor)
typedef unsigned int uint; // at least 32bits (depend of processor)_STLP_BEGIN_NAMESPACE
template<> struct __type_traits<sint8> : __type_traits_aux<1> {};
template<> struct __type_traits<uint8> : __type_traits_aux<1> {};
template<> struct __type_traits<sint16> : __type_traits_aux<1> {};
template<> struct __type_traits<uint16> : __type_traits_aux<1> {};
template<> struct __type_traits<sint32> : __type_traits_aux<1> {};
template<> struct __type_traits<uint32> : __type_traits_aux<1> {};
_STLP_END_NAMESPACE#endifusing namespace std;#ifndef _ARCHIVE_ENTITY_H
#define _ARCHIVE_ENTITY_Hclass CIArchive
{
public:
enum
{
R = 0,
W = 1
}; CIArchive(CISerial* pISerial, int mode);
~CIArchive(); bool IsReading() { return (m_nMode == R); } template<class T>
void Serial(T &obj)
{
TSerial(obj, __type_traits<T>::has_trivial_copy_constructor());
} template<class T>
void TSerial(T &obj, __false_type)
{
obj.Serial(*this);
} template<class T>
void TSerial(T &obj, __true_type)
{
(m_pISerial->*m_SerialFunc)(&obj, sizeof(T));
} template<class T, class T0>
void Serial(vector<T>* vec, T0* t, __false_type)
{
if(IsReading())
{
uint16 u2Len;
Serial(u2Len);
for(int i = 0; i < u2Len; i++)
{
T t;
Serial(t);
vec->push_back(t);
}
}
else
{
uint16 u2Len = vec->size();
Serial(u2Len); for(int i = 0; i < u2Len; i++)
{
Serial((*vec)[i]);
}
}
} template<class T, class T0>
void Serial(vector<T>* vec, T0* t, __true_type)
{
if(IsReading())
{
uint16 u2Len;
Serial(u2Len);
for(int i = 0; i < u2Len; i++)
{
T0* t = new T0;
Serial(*t);
vec->push_back(t);
}
}
else
{
uint16 u2Len = vec->size();
Serial(u2Len); for(int i = 0; i < u2Len; i++)
{
Serial(*(*vec)[i]);
}
}
} template<class K, class T, class T0>
void Serial(map<K,T>* m, T0* t0, __true_type)
{
if(IsReading())
{
uint16 u2Len;
Serial(u2Len); K k;
for(int i = 0; i < u2Len; i++)
{
Serial(k);
T0 t = new T0;
Serial(*t);
m->insert(map<K,T>::value_type(k,t));
}
}
else
{
uint16 u2Len = m->size();
Serial(u2Len); map<K,T>::iterator s = m->begin();
map<K,T>::iterator e = m->end(); for(; s !=e; s++)
{
Serial((K)(s->first));
Serial(*(s->second));
}
}
} template<class K, class T, class T0>
void Serial(map<K,T>* m, T0* t0, __false_type)
{
if(IsReading())
{
uint16 u2Len;
Serial(u2Len);
K k;
for(int i = 0; i < u2Len; i++)
{
Serial(k);
T t;
Serial(t);
m->insert(map<K,T>::value_type(k,t));
}
}
else
{
uint16 u2Len = m->size();
Serial(u2Len); map<K,T>::iterator s = m->begin();
map<K,T>::iterator e = m->end(); for(; s !=e; s++)
{
Serial((K)(s->first));
Serial((T)(s->second));
}
}
}
void Serial(string &a);
void Serial(char* szBuf, uint16 uSize); // help function
int Error();private:
CISerial* m_pISerial;
SERIAL_FUNC m_SerialFunc;
int m_nMode;
};
#endif
{
char str[100];
int i;
double m,
CString mystring;
}mystr,*mystr;.......................myStr sendstr;send(sockid,(char*)sendstr,sizeof(myStr),0);//接收端,同样定义这个结构体
typedef struct myStr
{
char str[100];
int i;
double m,
CString mystring;
}mystr,*mystr;.......................myStr *recvstr; //注意,在这里用指针char recvbuf[1024];
recv(sockid,recvbuf,1024,0);
recvstr = (myStr*)recvbuf;在这里已经完成,数据已经填充到了recvstr这个指针中了·
send(sockid,(char*)sendstr,sizeof(myStr),0);改为
send(sockid,(char*)&sendstr,sizeof(myStr),0);
其他的就是
send(socket,(char*)&sendstr,sizeof(myStr),0)
recv(socket,(char*)&recvstr,sizeof(myStr),0)
这样就基本可以用了呀