Sockets fonctionnent sur émulateur, pas sur N95
Bonjour à tous,
J'ai une MIDlet J2ME qui doit se connecter via des sockets à un serveur en PHP.
Ca fonctionne parfaitement sur l'émulateur (connexion, envoi de quelques données et réception d'une réponse de la part du serveur). Mais sur le N95 (connecté en 3G), le serveur reçoit la demande de connexion mais aucune donnée par la suite...
Voici le code côté client :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
String fullAddress = "socket://"+serverAddress+":"+serverPort;
SocketConnection sc = (SocketConnection) Connector.open(fullAddress);
OutputStream os = sc.openOutputStream();
InputStream is = sc.openInputStream();
os.write(mobilePhoneNumber.getBytes());
os.write(password.getBytes());
os.write(latitude.getBytes());
os.write(longitude.getBytes());
byte[]b = new byte[2];
is.read(b); |
Et le client, en PHP :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("could not create socket\n");
socket_set_option($socket,SOL_SOCKET, SO_RCVTIMEO, array("sec"=>5, "usec"=>5000));
socket_set_option($socket,SOL_SOCKET, SO_REUSEADDR, 1);
$bind = socket_bind($socket, $address, $port) or die("could not create socket");
socket_listen($socket) or die("could not set up socket listener");
$client=@socket_accept($socket);
socket_set_option($client,SOL_SOCKET, SO_RCVTIMEO, array("sec"=>5, "usec"=>5000));
echo "accept done </br>";
$phone_number = socket_read($client,12) or die("could not read phone number");
$password = socket_read($client,12) or die("could not read password");
$latitude = socket_read($client,12) or die("could not read latitude");
$longitude = socket_read($client,12) or die("could not read longitude"); |
Sur le serveur j'ai mis "REUSEADDR" pour pouvoir rebinder la même adresse si le serveur est killé pour une raison ou pour une autre :)
De plus, j'ai mis des timeout importants pour diverses raisons (>10000Km entre le client et le serveur, connexion de l'un des deux pays pourrie et serveur hébergé sur l'accès Internet d'un particulier...).
Du côté PHP il y a bien sûr une boucle pour accepter plusieurs clients, etc. mais je ne pense pas que le problème vienne de là.
Voilà je n'ai aucune idée de pourquoi le code fonctionne sur l'émulateur mais pas sur le Nokia N95 (qui accède à Internet avec une puce 3G). Quelqu'un aurait-il une idée ? :)