socket编程的几个不懂的地方,请各位指教下
环境:服务器采用select来处理多客户端请求
1、在单服务器多客户端情况下接收数据recv的时候怎么确定数据的大小?假如我使用的是接收1024字节,recv(clientA,buf,1024,0),但是客户端A发送了200字节过来,客户端B同时发送来了800字节的数据,请问现在服务器会怎么做?他会接收到200字节就结束还是把1000个字节数据都接收了?客户端发送的数据是放到系统缓冲区吗?如果是的话recv从缓冲区copy数据是不是就会把1000字节的数据copy过去,还是该函数接收了200字节后就等待一定时间然后返回?
2、记得好像看过通过包头来确定发送的数据的,那是怎么实现的?
3、setsockopt函数里的发送接收超时起的作用是什么?是指他在copy数据的时候不够1024字节时等待引起的超时吗?
socket select
[解决办法]
1 一般情况下都是先接受一个包头,
包头里(协议)定义好后面是否需要接受数据块,
需要的话,数据的大小,这些都会在包头里定义好的!较少情况用特殊的字符来
判断接受文件结束!
2 设置socket 的属性,接收发送数据的超时时间,如果在write函数和read函数
实现超时接收发送的话,则实际作用的是的write和read的超时时间
个人理解
int len;
int ret = recv(clientA,&len,sizeof int,0); //第一次接收包头
//以下省略了ret的判断
ret =recv(clientA,buf,len,0); //第二次接受包头指定长度的数据
//以下省略了对ret判断