当前位置:  技术问答>linux和unix

在AIX上一次性接收和发送大数据块出问题

    来源: 互联网  发布时间:2016-09-26

    本文导语:  在AIX机器上接收客户端的报文,将其中的图像处理之后返回给客户端。数据量特大。 怎么保证顺利接收和发送。 如果采用非阻塞方式,则返回给客户端的数据量太太,远超过发送buffer大小(设太太大肯定不行),分开...

在AIX机器上接收客户端的报文,将其中的图像处理之后返回给客户端。数据量特大。

怎么保证顺利接收和发送。
如果采用非阻塞方式,则返回给客户端的数据量太太,远超过发送buffer大小(设太太大肯定不行),分开发送,接收端接收到的数据不对,如果采用阻塞方式的话,如果客户端告知的数据长度比实际发送来的长度大,则导致一直等待客户端发送数据。


有什么好的解决办法吗?

谢谢。




现在用的是非阻塞方式。
int value = 1;
ioctl(sockfd, FIONBIO, (char *)&value, sizeof(value));
然后又设置了发送buffer和接收buffer的大小。

可是我现在需要的是发送大块的图像数据,可能达10M。
发送的时候,如果分多次发送,则接收端会多收到一些数据,而且是在两次发送中间。
发送代码如下:
long len = image_len;
long rest = len;
while(rest > 0)
{
  count = send(sockfd, ptr, SEND_BUFFER_SIZE  0)
{
  count = read();
  rest -= count;
}
如果len = 10000, 实际发过来的数据长度为8000,则会阻塞在count = read()语句上。


请大虾赐教。如果采用阻塞方式,则需解决接收的问题,如果采用非阻塞方式,则需解决发送的问题。

另外,不可能采用分包方式。不是技术原因。

|

信号的目的是中断read操作,此时read会返回一个错误,怎么处理这个错误取决于你的程序自己了。。

|
你这根本原因还是客户端发送的长度有误啊,明明只有8个字节,非说发送了10个字节..

抛开客户端不管,服务端想退出read()也是可以的..
比较适合的方法是使用select()

使用alarm()也可以,调用简单一些,你需要设置信号处理动作
在你的程序中添加信号处理函数的定义,空的函数体就行 void foo(int sig) {}
然后signal(SIGALRM, foo);

|
struct timeval timeout;
/* 30 Secs Timeout */
timeout.tv_sec = 30;
timeout.tv_usec = 0;

setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO,(struct timeval *)&timeout, sizeof(struct timeval));

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • AIX 5.3下调用windows 2000上的exe程序,且AIX下需要得到windows下程序执行的返回结果
  • AIX目前最新的编译器都支持C++0x标准里的那些内容?GCC 4.5.0是否能够在AIX上安装?
  • 公告:CSDN AIX论坛有奖话题讨论活动(七)——本期话题:在海量运算方面,和Linux系统相比,AIX系统有优势吗?
  • 哪里可以下载AIX操作系统?
  • 公告:CSDN AIX论坛有奖话题讨论活动(四)——本期话题:从开发周期上来看,和HP-UX、Solaris相比,AIX系统有优势吗?
  • 公告:CSDN AIX论坛有奖话题讨论活动(八)——本期话题:除了数据库应用,还有哪些应用也可以运行于AIX系统之上?(和Linux系统相比较,性能更优)
  • AIX共享内存分配问题
  • 求GCC for AIX5.3
  • aix上编译问题
  • linux -> aix 发展
  • 公告:CSDN AIX论坛有奖话题讨论活动(六)——本期话题:AIX的动态工作负载分区和Hypervisor的逻辑分区相比,有何优劣?
  • 操作系统 iis7站长之家
  • aix问题求教--愿给200分!!!
  • 关于AIX的进程间通讯的方法
  • window 向aix 的移植问题----在线等待
  • 普通pc机,可否装aix操作系统?
  • 有谁在AIX下装过下载版的websphere
  • IBM AIX可以用其他的unix 或者 lunix代替吗?
  • Oracle10g在AIX上的安装准备工作《Oracle大型数据库系统在AIX/unix上的实战详解》 集中答疑 40
  • 请问AIX下用什么命令能够获取CPU型号、频率信息,多CPU情况下


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3