socket的问题。 本帖最后由 oyljerry 于 2014-11-20 12:25:34 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 重复接受的时候,每接受完一次,清除接受buffer,然后再接受下一次。否则出现很多莫名其妙的错误 用string作为协议发送,这要多大啊...string是变长,为何不使用定长的数组呢? 用一个char数组,用另一个变量int length来指定数组长度 是粘包了?一般消息中都要携带数据长度的,TCP协议栈会根据当前的网络拥塞情况,将socket缓存中内容切成若干个包发过来的,接收端要循环接收的 可能粘包了。另外结构体不要用string。 呵呵,楼主真敢干啊。之所以能“偶然”发过去,是因为string内容的的长度 <=N 了,N在string结构内部。 有道理,但是为什么string内容的长度超过N了发过去就出错了呢?(测试了下,string长度超过15就会出错)? 呵呵,因为string是这么实现的,伪代码:class string {........private: size_t length; char buff[16]; char *ptr;};你看,这个string,他把内容存在buff或者ptr里,当内容不大于16(即 15 + 1 ,1是尾符0)时,他用buff存储,大于16时,就从堆里分配一块内存来存储。你发送了string对象,那么,如果内容长度不大于16,就可以将所有内容发过去,而大于16,你就只能发送一个“堆指针”过去了。堆指针只在你现在这个进程上有效,你把指针发送另外的进程,当然是wild pointer。 http://www.cnblogs.com/EdmundDwyane/p/3218838.htmlhttp://www.cnblogs.com/EdmundDwyane/p/3278641.htmlhttp://www.cnblogs.com/EdmundDwyane/p/3248297.html看明白这三篇文章,套接字你就都懂了,含demo 字符串倒是发送了,但是字符串的长度呢?这些信息都没有,不要使用string来发送信息。可以在设一个字符的长度信息。 菜鸟问题在线等,解决即给发,在视图中动态创建按钮的问题 选中对话框,点击"Enter"键,对话框消失了,怎么办? 电子元器件计算 有没有画曲线的代码,根据数据自动调节单位比例,画坐标线, 急问,一维图像的边缘检测!高分相送,谢谢各位了! 一个关于类的问题 若大一个CSDN,居然没搜索到我要找的一个似乎很简单的问题!可悲啊!! 救命呀!请教关于内存数据库的问题。 今天把类的成员函数挪出来成为全局函数,明天再放回去,看我多逍遥 求助! 谁有vc++5.0 中文版的 给小弟传下好么? 如何在MFC中读取access2010数据库中的数据 MFC中如何调用C工程?
{
........
private:
size_t length;
char buff[16];
char *ptr;
};你看,这个string,他把内容存在buff或者ptr里,当内容不大于16(即 15 + 1 ,1是尾符0)时,他用buff存储,大于16时,就从堆里分配一块内存来存储。你发送了string对象,那么,如果内容长度不大于16,就可以将所有内容发过去,而大于16,你就只能发送一个“堆指针”过去了。堆指针只在你现在这个进程上有效,你把指针发送另外的进程,当然是wild pointer。
看明白这三篇文章,套接字你就都懂了,含demo