Question

C'est donc vraiment une question de deux parties avec le premier menant à la seconde.

Je travaille sur un projet de serveur PHP et je suis un peu confus avec toutes les différentes manières que je peux créer une prise.J'ai réussi à créer trois sockets à l'aide d'une nouvelle méthode.Est-ce que quelqu'un connaît la différence fondamentale entre ces trois méthodes si?

Méthode 1 Utilisation '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éthode 2 Utilisation 'FSOCKOPEN'

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

Méthode 3 Utilisation '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)

Bien que je ne comprenne pas la différence, j'explore les trois options à la recherche d'un moyen de contrôler la taille de la fenêtre TCP.J'essaie de pousser un paquet à un client sur mon réseau local qui a une charge utile de données de 1460 octets et après avoir examiné une capture de paquets, la partie de données TCP de mon paquet est toujours coupée à 1448 octets.Des idées?

Merci d'avance!

Était-ce utile?

La solution

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.

Autres conseils

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top