请问一个关于网络通信中的一个发送数据buffer满的问题
请问一个关于网络通信中的一个发送数据buffer满的问题我的程序与老外做的程序相连,我的程序运行在windows上,老外的程序运行在linux上,
我们双方通信的协议是定义了一个字符串的开头和结尾是特殊字符,然后我这边每次recv一个char,
然后当收到了开头和结尾时,就将这俩个标志之间的数据提取,然后进行相关操作
但我们在通信比较繁忙的时候,即双方的通信数据很多,一秒可能会有20条或更多的字符串,每个字符串大概2000-3000个char
这样老外和我的程序就出现了错误,老外的程序显示是send buff full;
而我这边的函数recv也显示错误,于是重新连接,请问这是怎么回事
我知道tcp在windows上会有一个buffer,但是我该如何操作这个buffer呢?就是使用setsocketopt的那个函数吗?
还有,这是我的问题吗? 从现象来看,好像你的程序收取、处理数据速度太慢,两边不同步导致。
你是收取数据后,就开始处理的吗?还是采取网络收取和数据处理分离的策略? 我在做一个文件上传得服务器和客户端时,客户端将文件上传到服务器,服务段接收到数据后将数据放到另一个线程的消息队列中,就是Task-〉putq(mb)
那个处理数据的线程在一个while循环中不断的从消息队列中取消息,==〉进行长时间的业务处理(存储数据到文件或者将一些信息进行数据库的操作)
整个程序一个主线程不断接受客户端的连接和接收数据,(可以是异步),
第二个线程进行真正的业务处理
一共两个线程,我的程序的主线程运行ACE_Proactor::instance()->run_proactor_event_loop()
也可以开一个线程池, 在线程池中运行异步事件循环~ 建议你不要采用一次接受一个字节的方式,而是接受批量数据,然后在其他函数中处理这些数据,这样应该就没有问题了。
页:
[1]