spyk
13/07/2006, 17h19
Bonjour a tous!
Me revoici pour ma question de la semaine ;)
Donc bon, comme vous avez pus le voir précèdement, j'arrive maintenant a activer le wifi avec oslib ;)
Cependant, j'ai encore quelques probleme de socket.
Alors, le programme qui va suivre fait les chose suivantes :
-Connection au wifi
-Reception du message d'acceuille du server avec recv()
-Envoie d'un message avec send()
-Reception de la reponse avec recv
//Port et maxdatasize
#define PORT 3030 /* Le port où le client se connectera */
#define MAXDATASIZE 300 /* Tampon d'entrée */
//***
//Definition des pointeurs vers nos images
//***
OSL_IMAGE *fond;
void start_client()
{
int sockfd, numbytes, sentbytes;
char *buf[MAXDATASIZE];
char *msg;
struct hostent *he;
struct sockaddr_in their_addr; /* Adresse de celui qui se connecte */
if ((he=gethostbyname("192.168.0.1")) == NULL)
{ /* Info de l'hôte */
oslPrintf("erreur avec gethostbyname\n");
}
//Création du socket
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
oslPrintf("error creating socket\n");
}
//Définition du socket
their_addr.sin_family = AF_INET; /* host byte order */
their_addr.sin_port = htons(PORT); /* short, network byte order */
their_addr.sin_addr = *((struct in_addr *)he->h_addr);
bzero(&(their_addr.sin_zero), 8); /* zero pour le reste de struct */
//Connection du socket
oslPrintf("Connection au PC \n");
if (connect(sockfd, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1)
{
oslPrintf("error connecting socket\n");
}
oslPrintf("Reception de la chaine de texte\n");
if ((numbytes=recv(sockfd, buf, MAXDATASIZE, 0)) == -1)
{
oslPrintf("error recv()\n");
}
buf[numbytes] = '\0';
oslPrintf("Recu: %s\n",buf);
oslPrintf("Boucle, appuyé sur bas, haut, ou start pour quitter\n");
// oslEndDrawing();
while (!osl_quit)
{
oslWaitKey();
oslReadKeys();
if (osl_keys->held.down)
{
oslPrintf("Envoie du msg...\n");
msg = "Hello World!";
if ( send(sockfd, msg, strlen(msg), 0) == -1)
{
oslPrintf("Erreur avec send()");
}
oslPrintf("Bytes envoyées!\n");
}
if (osl_keys->held.up) oslPrintf("Vous appuyez Haut\n");
if (osl_keys->held.left) oslPrintf("Vous appuyez Gauche\n");
if (osl_keys->held.right) oslPrintf("Vous appuyez Droite\n");
if (osl_keys->held.start) break;
/*
//Affichage de la reception du server
if ((numbytes=recv(sockfd, buf, MAXDATASIZE, 0)) == -1)
{
oslPrintf("error recv()\n");
}
buf[numbytes] = '\0';
oslPrintf("Recu: %s\n",buf);
*/
}
//Fermeture du socket
close(sockfd);
}
(J'ai laissé que la fonction qui nous interesse, j'ai enlevé le reste du programme, qui active le wifi et tout le blabla...)
Donc voici le probleme:
Je peux recevoire le message d'acceuille avec recv, pas de probleme, mais si jamais je tente de recevoire quelque chose, alors que le server n'a rien a dire, la PSP plante...
2e Probleme, bien qu'aucun message d'erreur ne s'affiche, le fonction send()
N'envoie rien...
Et si on veux compter les bytes envoyés avec
sentbytes = send(socket, message, taille,0)
La PSP plante...
J'espere que quelqun auras une solution...
Merci encore a vous tous !
Me revoici pour ma question de la semaine ;)
Donc bon, comme vous avez pus le voir précèdement, j'arrive maintenant a activer le wifi avec oslib ;)
Cependant, j'ai encore quelques probleme de socket.
Alors, le programme qui va suivre fait les chose suivantes :
-Connection au wifi
-Reception du message d'acceuille du server avec recv()
-Envoie d'un message avec send()
-Reception de la reponse avec recv
//Port et maxdatasize
#define PORT 3030 /* Le port où le client se connectera */
#define MAXDATASIZE 300 /* Tampon d'entrée */
//***
//Definition des pointeurs vers nos images
//***
OSL_IMAGE *fond;
void start_client()
{
int sockfd, numbytes, sentbytes;
char *buf[MAXDATASIZE];
char *msg;
struct hostent *he;
struct sockaddr_in their_addr; /* Adresse de celui qui se connecte */
if ((he=gethostbyname("192.168.0.1")) == NULL)
{ /* Info de l'hôte */
oslPrintf("erreur avec gethostbyname\n");
}
//Création du socket
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
oslPrintf("error creating socket\n");
}
//Définition du socket
their_addr.sin_family = AF_INET; /* host byte order */
their_addr.sin_port = htons(PORT); /* short, network byte order */
their_addr.sin_addr = *((struct in_addr *)he->h_addr);
bzero(&(their_addr.sin_zero), 8); /* zero pour le reste de struct */
//Connection du socket
oslPrintf("Connection au PC \n");
if (connect(sockfd, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1)
{
oslPrintf("error connecting socket\n");
}
oslPrintf("Reception de la chaine de texte\n");
if ((numbytes=recv(sockfd, buf, MAXDATASIZE, 0)) == -1)
{
oslPrintf("error recv()\n");
}
buf[numbytes] = '\0';
oslPrintf("Recu: %s\n",buf);
oslPrintf("Boucle, appuyé sur bas, haut, ou start pour quitter\n");
// oslEndDrawing();
while (!osl_quit)
{
oslWaitKey();
oslReadKeys();
if (osl_keys->held.down)
{
oslPrintf("Envoie du msg...\n");
msg = "Hello World!";
if ( send(sockfd, msg, strlen(msg), 0) == -1)
{
oslPrintf("Erreur avec send()");
}
oslPrintf("Bytes envoyées!\n");
}
if (osl_keys->held.up) oslPrintf("Vous appuyez Haut\n");
if (osl_keys->held.left) oslPrintf("Vous appuyez Gauche\n");
if (osl_keys->held.right) oslPrintf("Vous appuyez Droite\n");
if (osl_keys->held.start) break;
/*
//Affichage de la reception du server
if ((numbytes=recv(sockfd, buf, MAXDATASIZE, 0)) == -1)
{
oslPrintf("error recv()\n");
}
buf[numbytes] = '\0';
oslPrintf("Recu: %s\n",buf);
*/
}
//Fermeture du socket
close(sockfd);
}
(J'ai laissé que la fonction qui nous interesse, j'ai enlevé le reste du programme, qui active le wifi et tout le blabla...)
Donc voici le probleme:
Je peux recevoire le message d'acceuille avec recv, pas de probleme, mais si jamais je tente de recevoire quelque chose, alors que le server n'a rien a dire, la PSP plante...
2e Probleme, bien qu'aucun message d'erreur ne s'affiche, le fonction send()
N'envoie rien...
Et si on veux compter les bytes envoyés avec
sentbytes = send(socket, message, taille,0)
La PSP plante...
J'espere que quelqun auras une solution...
Merci encore a vous tous !