标题:TCP服务器和客户端全代码
作者:soeasy
日期:2013-05-01 13:40
内容:
http://download.csdn.net/detail/ochuncui1/5319421
TCP服务器和客户端全代码。本来是想用结构体传输数据的。 一直没成功 。
#1 回 楼主(za6234567) 的帖子 [ppdayz 05-01 15:11]
结构体传数据不难的,结构体构建好了直接强转成char *,然后用qint64 QAbstractSocket::writeData(const char * data, qint64 size) 就可以了,对端接收之后再转回来就可以了,注意大小端和字节对齐问题。
#2 回 1楼(ppdayz) 的帖子 [soeasy 05-01 16:54]
可是拿不到结构体大小啊 ,
#3 回 2楼(za6234567) 的帖子 [ppdayz 05-01 17:33]
结构体大小sizeof()啊,如果是这样的结构体
{
int a;
int b;
unsigned charname []
}_ab;
的这种,就是sizeof(_ab)+[]的长度,你自己传多少数据自己肯定知道的。
而且一般来说,要定义一个包头,包头中要指定包的数据大小,然后传送的总大小就是包头大小+数据大小
比如说定义个结构体:struct _package
{
unsigned int xxx;
unsigned int data_len;
unsigned char data[];
};
typedef struct _package PACKAGE;
然后用memcpy把数据和包头拼在一起,发掉句可以了。数据长度就是data_len+包头的长度;
#4 [最不过执着 05-04 13:48]
楼主你好,请教下问题。
服务器端如何获取已经连接的客户端的主机信息。又如何对这些信息进行管理呢?
当我client1想对client2发消息时,server是如何知道这些信息的?