网络编程 接收缓存的处理问题
发布网友
发布时间:2022-05-07 15:45
我来回答
共3个回答
热心网友
时间:2022-06-30 14:29
网络传输中,协议都是为一定的目的制定的,要遵守一定的规则
如果是客户机发了一段没用的数,那说明就是不符合你的规则,也就是不符合你制定协议的内容
如果真的要在这基础上改,可以为你的socket设置一个接收超时(setsockopt),比如1秒,
再接收这段你认为没有用的数据(根据实际你可以预先就分配一个空间,比如1K,然后循环接收,直到超时,也就是recv返回0)。
这个buff你不处理就是了追问这个方法是可以的,可是我想知道的是,手动清除系统分配的接收缓存的方法
比如接收终端输入,可以用fflush函数清空缓存中的内容,那么在套接字编程中,有没有手动清除系统分配的接收缓存的方法。
循环recv的方法我问题说了,不想用这个。。
追答没有,内核负责管理这块空间
热心网友
时间:2022-06-30 14:29
recv用的缓存不就是自定义的?不是系统分配的吧?
recv(SOCKET s, char *buf, int len, int flags);
你说的是这个定义里面的buf吗?这个自己在程序开始的时候初始化不就行了?
还是我没能理解你的问题?
补充:
我以前用的是刚连接上的时候,客户端给服务器端发送约定好的一串字符,服务器端接受到后发送另一串约定好的字符给客户端确认,这样之后,才正式开始通讯。比如:
Client -> Server: "Connection requested"
Server -> Client: "Connection authorized"追问这个方法是可以的,可是我想知道的是,手动清除系统分配的接收缓存的方法
比如接收终端输入,可以用fflush函数清空缓存中的内容,那么在套接字编程中,有没有手动清除系统分配的接收缓存的方法。
追答这个就不清楚了,恕我*为力。
热心网友
时间:2022-06-30 14:30
把socket设为non block,在条件满足时去循环recv。把读到的数据丢弃。直到读不到数据了。缓冲区就被清空了。然后就正常了。追问也是循环 recv......
我想知道的是,手动清除系统分配的接收缓存的方法
比如接收终端输入,可以用fflush函数清空缓存中的内容,那么在套接字编程中,有没有手动清除系统分配的接收缓存的方法。