Cuando uso CSocket::Send(character, length); para enviar datos, ¿cómo controlo la configuración de longitud? ¿Cómo puedo obtener la longitud máxima?
Puedes utilizar la transmisión multiproceso y establecer el tamaño del búfer al mismo tiempo
3. Durante los procesos send() y recv(), a veces debido a las condiciones de la red y otras. Por motivos, el envío y la recepción no se pueden realizar como se esperaba, y Establezca el límite de tiempo de envío y recepción:
int nNetTimeout=1000;//1 segundo
//Límite de tiempo de envío p>
setsockopt(socket, SOL_S0CKET, SO_SNDTIMEO, (char *) &nNetTimeout,sizeof(int));
//Límite de tiempo de recepción
setsockopt(socket, SOL_S0CKET, SO_RCVTIMEO, (char *)&nNetTimeout,sizeof(int));
4. Durante send(), lo que se devuelve son los bytes realmente enviados (sincrónicos) o los bytes enviados al buffer del socket
(asíncrono); el estado predeterminado del sistema es enviar y Una recepción es de 8688 bytes (aproximadamente 8,5 K en el proceso real, la cantidad de datos enviados y recibidos es relativamente grande, por lo que el búfer del socket se puede configurar en); Evite send(), recv() Envío y recepción cíclicos continuos:
//Recibir buffer
int nRecvBuf=32*1024;//Establecer en 32K
setsockopt(s,SOL_SOCKET,SO_RCVBUF ,(const char*)&nRecvBuf,sizeof(int));
//Enviar buffer
int nSendBuf=32*1024;//Establecer a 32K
setsockopt(s,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int));
5. buffer al buffer del socket La copia afectará el rendimiento del programa:
int nZero=0;
setsockopt(socket, SOL_S0CKET, SO_SNDBUF, (char *)&nZero, sizeof( nZero));
6. Complete la función anterior en recv() como se indica arriba (el valor predeterminado es copiar el contenido del búfer del socket al búfer del sistema):
int nZero =0;
setsockopt(socket, SOL_S0CKET,SO_RCVBUF, (char *)&nZero, sizeof(int));