tous. J'ai un petit problème avec le programme du serveur client. J'ai deux types différents de clients essayant de se connecter à un serveur, l'un est juste plus barebone que l'autre avec moins de choses à faire. Mais autrement, ils sont pratiquement les mêmes. Alors que le code barebone peut se connecter au serveur et le serveur l'accepte bien, la version élaborée de celui-ci ne peut pas. Le client dit qu'il est connecté, envoie des messages (via send() et sendto()) et obtient le nombre d'octets renvoyés. Mais le serveur ne le reconnaît pas. Je ne suis pas vraiment sûr pourquoi, en comparant les deux versions de clients, ils sont vraiment la même chose (au moins jusqu'à ce que connect() soit appelé), la version élaborée a bind() alors que la version barebone ne le fait pas. Quelqu'un peut-il voir un problème pourquoi ces codes très similaires ne fonctionnent pas similaires: PProblème Client Server avec connect() ou accept()
if (argc == 3)
{
host = argv[1]; // server address
info.c_name = argv[2];
}
else
{
printf("plz read the manual, kthxbai\n");
exit(1);
}
hp = gethostbyname(host);
if (!hp)
exit(1);
printf("host found\n");
// setting up address and port structure information
bzero((char *) &server_address, sizeof(server_address));
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = htonl(INADDR_ANY);
server_address.sin_port = htons(SERVER_PORT);
// opening up socket
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
exit(1);
else
printf("socket is opened: %i \n", sockfd);
info.sock_fd = sockfd;
// binding socket to a port: not in barebone version
rv = bind(sockfd, (struct sockaddr *) &server_address, sizeof(server_address));
if (rv < 0)
{
printf("MAIN: ERROR bind() %s\n", strerror(errno));
exit(1);
}
else
printf("socket is bound\n");
// connecting
rv = connect(sockfd, (struct sockaddr *) &server_address, sizeof(server_address));
printf("rv = %i\n", rv);
if (rv < 0)
{
printf("MAIN: ERROR connect() %i: %s\n", errno, strerror(errno));
exit(1);
}
else
printf("connected\n");
Je ne suis même pas sûr où le problème est, que ce soit la version élaborée du client ou il est juste le serveur? Merci pour tout éclaircissement.
bien le client se bloque pour une raison quelconque connect() mais merci de me parler de bind(), à quoi pensais-je ?? (évidemment pas) –