Pregunta

Así que esta es realmente una pregunta de dos partes con la primera que conduce al segundo.

Estoy trabajando en un proyecto de servidor PHP y estoy un poco confundido con todas las formas diferentes de que puedo crear un socket.He logrado crear tres sockets cada uno con un nuevo método.¿Alguien sabe la diferencia fundamental entre estos tres métodos si alguna?

Método 1 usando 'socket_create'

$Socket1 = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)
socket_bind($Socket1, $LocalIP, $LocalPort)
socket_connect($Socket1, $DestIP, $DestPort)
//Method 1 Read
socket_read($Socket1)
//Method 1 Write
socket_write($Socket1, $WriteMsg, strlen($WriteMsg))

Método 2 usando 'fsockopen'

$Socket2 = fsockopen($Server, $Port)
//Method 2 Read
fgets($Socket2)
//Method 2 Write
fputs($Socket2, $PutMsg, strlen($PutMsg))

Método 3 usando 'stream_socket_client'

$Socket3 = stream_socket_client('tcp://'.$DestIP.':'.$DestPort)
//Method 3 Read
stream_socket_recvfrom($Socket3, $RecSize)
//Method 3 Write
stream_socket_sendto($Socket3, $SendMsg)

Aunque no entiendo la diferencia que estaba explorando las tres opciones en busca de una manera de controlar el tamaño de la ventana TCP.Estoy tratando de presionar un paquete a un cliente a través de mi LAN que tiene una carga útil de datos de 1460 bytes y, después de revisar una captura de paquetes, la parte de datos TCP de mi paquete siempre se cortó en 1448 bytes.¿Alguna idea?

¡Gracias de antemano!

¿Fue útil?

Solución

You can't control the actual amount of data received at a time. TCP is a streaming protocol. It presents a byte-stream API to the application. You just have to be prepared to read and re-read until you have got what you want.

Otros consejos

You should be able to do this with the socket_set_option command (where options are documented in the socket_get_option command):

$Socket1 = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)
// send window
socket_set_option($Socket1, SOL_SOCKET, SO_SNDBUF, 1460);

Just be sure to call it right after socket_create. If you need the receive window modified:

socket_set_option($Socket1, SOL_SOCKET, SO_RCVBUF, 1460);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top