一、Linux发送网络消息的过程 (1) 应用程序调用write()将消息发送到内核中 ( 2)内核中的缓存达到了固定长度数据后,一般是SO_SNDBUF,将发送到TCP协议层 (3)IP层从TCP层收到数据,会加上自己的包头然后发送出去。一般分片的大小是MTU(含IP包头),而IPV4...
分类:
系统相关 时间:
2015-05-09 23:37:17
阅读次数:
311
今天碰到一个奇怪的问题,有一个页面,想指定用IE浏览器打开,在VS开发环境没有问题,但部署到服务器上,即使是用IE打开页面,还是提示“仅支持IE”,真是晕啊!!判断是否IE浏览器用的是window.navigator.userAgent,跟踪这个信息,发现在开发环境,识别为IE10,但访问服务器则识...
分类:
Web程序 时间:
2015-04-30 18:06:50
阅读次数:
129
这一节主要关注的还是粘包问题,我们利用recv实现一个recv_peek函数,它的目的是偷窥目的,它是利用recv的一个msg_peek参数与read的区别,read读取后会擦除缓冲区的内容,而recv结合msg_peek会读取的时候并不擦除缓冲区的内容,起到一个可以偷窥的目的,利用这个特性可以用r...
分类:
其他好文 时间:
2015-04-28 01:50:25
阅读次数:
114
tcp是基于字节流的,udp是基于报文即数据包的,所以tcp会产生一个叫做粘包的问题,而udp不会产生。我们这节主要讨论粘包问题:先看一下粘包问题的原因:总结如下:1、应用进程的缓冲区和Socket缓冲区的大小不一定相吻合。2、tcp传输段有mss限制。3、链路层有个mtu限制。粘包的解决方案:1、...
分类:
其他好文 时间:
2015-04-27 00:16:13
阅读次数:
129
最近需要写一个C组成的服务器端与C#的客户端进行交互的软件,刚开始写的时候发现C#端解析时候出现了故障,经过仔细研究后发现原因是发送方传输太快,出现了所谓粘包的现象。也就是在C#端的Receive()。这个函数返回的是多个结构体连起来的数据,这当然是无法解析的。我的解决方案如下: List list...
在用golang开发人工客服系统的时候碰到了粘包问题,那么什么是粘包呢?例如我们和客户端约定数据交互格式是一个json格式的字符串:{"Id":1,"Name":"golang","Message":"message"}当客户端发送数据给服务端的时候,如果服务端没有及时接收,客户端又发送了一条数据上...
分类:
其他好文 时间:
2015-04-13 12:16:40
阅读次数:
224
http://zhaohuiopensource.iteye.com/blog/1541270首先看两个概念:短连接:连接->传输数据->关闭连接 HTTP是无状态的,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。 也可以这样说:短连接是指SOCKET连接后发送后接收完...
分类:
其他好文 时间:
2015-03-21 12:32:41
阅读次数:
133
最近在研究luasocket,准备用全部用lua的扩展库来实现一套轻量级框架,用来做一些工具、简单的游戏服务器,以及作为网络库用在cocos2dx中。
完善的网络库必然会遇到粘包、半包的问题,luasocket也不例外,由于网络部分在lua,协议的制定和buff的解析都没有合适的方案,又不想在C++中来封装接口,后面在网上查了一些资料,发现lua也有一个二进制打包的扩展库——lpack,了解之后发现...
分类:
其他好文 时间:
2015-03-17 12:26:58
阅读次数:
987
UDP特点 无连接,面向数据报(基于消息,不会粘包)的数据传输服务; 不可靠(可能会丢包, 乱序, 重复), 但因此一般情况下UDP更加高效;UDP客户/服务器模型 UDP-API使用#include
#include
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
str...
分类:
其他好文 时间:
2015-03-14 21:48:13
阅读次数:
182
TCP粘包问题由于TCP协议是基于字节流且无边界的传输协议, 因此很有可能产生粘包问题, 问题描述如下 对于Host A 发送的M1与M2两个各10K的数据块, Host B 接收数据的方式不确定, 有以下方式接收: 先接收M1, 再接收M2(正确方式) 先接收M2, 再接收M1(错误) 一次性收到20k数据(错误) 分两次收到,第一次15k,第二次5k(错误) 分两次收到...
分类:
其他好文 时间:
2015-03-14 17:02:51
阅读次数:
138