Client -> Serveur [Résolu]

Signaler
Messages postés
215
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
21 août 2011
-
Messages postés
34
Date d'inscription
vendredi 10 mars 2006
Statut
Membre
Dernière intervention
14 septembre 2008
-
Bonjour à tous.

N'étant pas encore assez expérimenté dans le domaine des sockets je vous demande conseil.
Je code sous Borland Builder C++ 6 avec les Socket (ClientSocket et ServerSocket).

J'arrive à me connecter à mon application serveur mais si depuis le serveur je veut répondre au client ça plante en me disant que je ne peut pas envoyer une trame car je suis pas connecté.

Code utilisé depuis le serveur vers le client
ServerSocket1->Socket->SendText("Test");

Quelqun peut m'aider ?

Bonne journée / soirée a tous.

Norton.

5 réponses

Messages postés
34
Date d'inscription
vendredi 10 mars 2006
Statut
Membre
Dernière intervention
14 septembre 2008

serveur.c

#include <stdio.h>
#include <winsock2.h>

int main(int argc, char *argv[])
{
    WSADATA wsa;
    WSAStartup(MAKEWORD(2,0), &wsa);
    SOCKADDR_IN sin = {0};
    SOCKET sock;
    sock = socket(AF_INET, SOCK_STREAM, 0);
    sin.sin_addr.s_addr = htonl(INADDR_ANY);
    sin.sin_family = AF_INET;
    sin.sin_port = htons(125);
    bind(sock, (SOCKADDR*)&sin, sizeof(sin));
    listen(sock, 2);
    SOCKADDR_IN csin = {0};
    int size = sizeof(csin);
    SOCKET csock;
    csock = accept(sock, (SOCKADDR*)&csin, &size);
    char buffer[50];
    int x = 1;
    int error;
    int buf = 0;
    do
    {
        fgets(buffer, sizeof(buffer), stdin);
        send(csock, buffer, strlen(buffer), 0);
        do
        {
            buffer[buf] = '\0';
            buf++;
        }while(buf == 50);
        error = recv(csock, buffer, sizeof(buffer), 0);
        if(error != SOCKET_ERROR)
        {
            buffer[error] = '\0';
            printf("%s", buffer);
        }
        do
        {
            buffer[buf] = '\0';
            buf++;
        }while(buf == 50);
    }while(x);
    shutdown(csock, 2);
    closesocket(csock);
    closesocket(sock);
    WSACleanup();
}

client.c

#include <stdio.h>
#include <winsock2.h>

int main(int argc, char *argv[])
{
    WSADATA wsa;
    WSAStartup(MAKEWORD(2,0), &wsa);
    SOCKADDR_IN sin = {0};
    SOCKET sock;
    sock = socket(AF_INET, SOCK_STREAM, 0);
    sin.sin_addr.s_addr = inet_addr("127.0.0.1");
    sin.sin_family = AF_INET;
    sin.sin_port = htons(125);
    connect(sock, (SOCKADDR*)&sin, sizeof(sin));
    char buffer[50];
    int x = 1;
    int error;
    int buf = 0;
    do
    {
        error = recv(sock, buffer, sizeof(buffer), 0);
        if(error != SOCKET_ERROR)
        {
            buffer[error] = '\0';
            printf("%s", buffer);
        }
        do
        {
            buffer[buf] = '\0';
            buf++;
        }while(buf == 0);
        fgets(buffer, sizeof(buffer), stdin);
        send(sock, buffer, strlen(buffer), 0);
        do
        {
            buffer[buf] = '\0';
            buf++;
        }while(buf == 0);
    }while(x);
    closesocket(sock);
    WSACleanup();
}
Messages postés
34
Date d'inscription
vendredi 10 mars 2006
Statut
Membre
Dernière intervention
14 septembre 2008

 Je t'enverrai deux fichiers client serveur lundi.
Messages postés
215
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
21 août 2011

Bonjour, merci bien à vous.
Bonne journée.
Messages postés
215
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
21 août 2011

Bonjour, merci pour ce code.
Je vais l'étudier et je reviendrai sur ce poste si j'ai des questions.

Bonne journée.
Norton.
Messages postés
34
Date d'inscription
vendredi 10 mars 2006
Statut
Membre
Dernière intervention
14 septembre 2008

J'ai fait quelques erreurs mais ça reste compilable.