首先庆祝下Rock博客(ray77.com)的Google PR今天荣升到2了,对于Google的工程师们PR似乎只是个小游戏,但还是挺值得高兴的。以后Rock只发布原创的东西了,即使要转载也只转载一些相当有意义的文章,充数的杂闻就可以PASS了
。In my opinion , It is simply a weblog , a personal blog …
再唠叨下工作的事情。摩力游(moliyo)的人力资源部与程序部的高管似乎比较认可我的资质与技术水平,但学校还有些麻烦的事情需要请假处理这让他们比较难接受,不管怎么样,Rock一直在尽量协商,但愿不会影响到复试。对摩力游的中级客户端工程师还是相当憧憬的。
嗯,接下来进入主题了,谈下C++中如何利用socket发送结构体,此教程只供网络编程菜鸟参考,高手可以绕路了。
在网络通讯过程中往往涉及一些有关联的参数传递,例如数组,结构体之类的。对于结构体其实方法挺简单,由于结构体对象在内存中分配的空间都是连续的,所以可以将整个结构体直接转化成字符串发送,到了接收方再将这个字符串还原成结构体就大功告成了。
首先,我们建立一个结构体。
struct UsrData{
char usr_id[16];
char usr_pwd[16];
char usr_nickname[16];
};
当然,这个结构体在发送方与接收方都必须声明。
接下来创建对象并初始化,然后发送。
UsrData sendUser;
memcpy( sendUser.usr_id, “100001”, sizeof(“100001”) );
memcpy( sendUser.usr_pwd, “123456”, sizeof(“123456”) );
memcpy( sendUser.usr_nickname, “Rock”, sizeof(“Rock”) );
send( m_socket, (char *)&sendUser, sizeof(UsrData), 0 );
这样发送方就已经将这个mUser对象以字符串的形式发送出去了。
最后在接收方做接收。
char buffer[1024];
UsrData recvUser;
recv( m_socket, buffer, sizeof(buffer), 0 );
memcpy( &recvUser, buffer, sizeof(buffer) );
这样得到的recvUser对象里的数据与sendUser相同了。具体原因其实很简单,就是因为结构体对象的内存区域连续,同时每个成员的区块大小都分配好了,当接收完自己的区块,其实自己的数据已经接收完成。挺简单的,但还是挺有用的。


Apr 2, 20096:54 PM
你应该挺容易找工作的哈,呵呵!恭喜下!!
下面的东东我就看不懂了!!
[Reply]