需要用c实现一个简单的C/S程序.
Client端因为需要在收到SIGIO信号之后在Handler里面接受字节流,Server端使用Select()轮询可用的FileDescriptor. 每次发送的字节数固定不变(recv的大小预先知道).
两边公用的接收代码如下:
现在的问题是程序经常跑飞,在客户端经常会发现接收的字节数为-1;
Bytes received -> -1 , need more bytes 4170
在服务器端有时可以成功,有时会失败,收到字节数为0:
Bytes received -> 0 , need more bytes 4170;
问题是是,如果客户端收到了SIGIO信号后,不是能够说明TCP管道中有数据可以被读,那为什么初选recv == -1 的情况? 同理,服务器端使用Select(),不是同样说明管道中有数据,为何读取的时候字节数为0?
Google过关于TCP Message Fragment的问题,建议是用循环把包拼起来,直到大小正确为止.但是目前用这个办法效果不太好. 是我哪里写的不对?
Client端因为需要在收到SIGIO信号之后在Handler里面接受字节流,Server端使用Select()轮询可用的FileDescriptor. 每次发送的字节数固定不变(recv的大小预先知道).
两边公用的接收代码如下:
现在的问题是程序经常跑飞,在客户端经常会发现接收的字节数为-1;
Bytes received -> -1 , need more bytes 4170
在服务器端有时可以成功,有时会失败,收到字节数为0:
Bytes received -> 0 , need more bytes 4170;
问题是是,如果客户端收到了SIGIO信号后,不是能够说明TCP管道中有数据可以被读,那为什么初选recv == -1 的情况? 同理,服务器端使用Select(),不是同样说明管道中有数据,为何读取的时候字节数为0?
Google过关于TCP Message Fragment的问题,建议是用循环把包拼起来,直到大小正确为止.但是目前用这个办法效果不太好. 是我哪里写的不对?