Bonjour,
J'ai un probléme avec la fonction socketlit. Elle a l'air de marcher trés bien lorsque j'ecris dans une socket avec socketecrit.
Par contre la c'est que j'ai un programme écrit en C qui le fait.
Voici le code du serveur coté windev :
code initialisation de la fenetre :
ThreadMode(threadSectionCritique)
// crée une socket sur le poste serveur
SI SocketCrée ( "Serveur" , 4902 ) = Faux ALORS
Erreur ( "Erreur de création " + ErreurInfo ( errMessage ))
SINON
// Gestion des connexions des postes clients dans un thread
ThreadExécute ( "Thread1" , threadNormal , ProcedureAttente )
FIN
Fonction ProcedureAttente
Dans cette fonction j'ai bien le trace qui s'affiche lorsque je me connecte avec mon client en C
BOUCLE
SI SocketAttendConnexion ( "Serveur" ) ALORS
Canal est une chaîne
Trace("connection etabli")
// Si la connexion est acceptée,
// la gestion de cette connexion est réalisée dans un thread spécifique
Canal = SocketAccepte ( "Serveur" )
ThreadExécute (Canal, threadNormal , ProcedureGestion , Canal )
FIN
FIN
Procedure ProcedureGestion
J'ai egalement le trace entrer gestion qui s'affiche
Trace("entrer gestion")
lu est une chaîne
lu=SocketLit(canal)
Trace( "gestion:" + lu)
RETOUR
Par contre ca bloque au socketlit ca n'affiche rien alorq que coté client j'envoi bien des messages.
Client en C :
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <unistd.h>
#include <stdlib.h>
#define MAX_SEND 100
int main()
{
int sock;
struct sockaddr_in sin;
char buffer[512];
int i=0;
sock = socket(AF_INET, SOCK_STREAM, 0);
if(sock==-1){
perror("erreur creation socket");
return 0;
}
sin.sin_addr.s_addr = inet_addr("127.0.0.1");
sin.sin_family = AF_INET;
sin.sin_port = htons(4902);
if(connect(sock, (struct sockaddr *)&sin, sizeof(sin))==-1) {
perror("erreur connect");
return 0;
}
strcpy(buffer,"bonjour windev");
for(i=0;i<20;i++)
printf("%d\n",send(sock, buffer, sizeof(buffer), 0));
return 0;
}
Voila ce code est sensé compilé pour linux j'utilise cygwin.
Vraiment je ne comprends pas pourquoi le socketlit ne marche pas.. Y'a un parametre a modifié ???