Network : simple chat.

Sample about simple network functions.

socket, bind, listen, connect, accept

See version :

Pas de dépendances

Download :

#include<stdio.h>    
#include<winsock2.h>
#pragma comment(lib,"ws2_32.lib")

void purger()
{
    int c;
    while ((c = getchar()) != '\0' && c != '\n');
}

int askport()
{
    int port;    
    printf("Port : ");
    scanf("%i",&port);
    purger();
    return port;
}

void askIP(char ip[15])
{
    printf("Ip : ");
    scanf("%s",ip);    
    purger();
}

int dialogue(SOCKET sock,int tour)
{
    int err = 0;
    char buffer[500];
    while(err>=0)
    {
        memset(buffer,0,sizeof(buffer));
        if (tour==1)
        {
            printf("A vous > ");
            scanf("%500[^\n]",buffer);
            purger();
            err = send(sock,buffer,sizeof(buffer),0);
            tour = 0;
        }
        else
        {
            printf("Attente : ");
            err = recv(sock,buffer,sizeof(buffer),0);
            printf("%s\n",buffer);
            tour = 1;
        }
    }
    return 0;
}

int serveur()
{
    SOCKET sock_attente;    
    SOCKET sock_dialogue;
    SOCKADDR_IN csin;
    int len;
    char buffer[50];
    int err=0;
    int port = askport();
    csin.sin_family=AF_INET;
    csin.sin_addr.s_addr=htonl(INADDR_ANY);
    csin.sin_port=htons(port);
    sock_attente = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    if (sock_attente == INVALID_SOCKET)
        return -1;
    if (bind(sock_attente,(SOCKADDR*)&csin,sizeof(csin)) == SOCKET_ERROR)
        return -2;
    printf("Listen...\n");
    if (listen(sock_attente, 1) == SOCKET_ERROR)
        return -3;
    len = sizeof(csin);
    printf("Attente client...\n");
    sock_dialogue = accept(sock_attente, (SOCKADDR *)&csin, &len);
    if (sock_dialogue==INVALID_SOCKET)
        return -4;
    printf("Connection ok\n");
    dialogue(sock_dialogue,0);
    return 0;
}

int client()
{
    char ip[15];
    int port;
    SOCKET sock;    
    SOCKADDR_IN sin;
    askIP(ip);
    port = askport();
    sin.sin_family=AF_INET;
    sin.sin_addr.s_addr=inet_addr(ip);
    sin.sin_port=htons(port);
    sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    if (sock == INVALID_SOCKET)
        return -1;
    printf("Connection...\n");
    if(connect(sock,(SOCKADDR*)&sin,sizeof(sin)) == SOCKET_ERROR)
        return -2;
    printf("Connection ok\n");
    dialogue(sock,1);
    return 0;
}

int main()
{
    int choix;
    int ret;
#ifdef WIN32
    WSADATA wsa; 
    WSAStartup(MAKEWORD(2,0),&wsa);    
#endif
    printf("Serveur = 0 ; Client = 1 : ");
    scanf("%d",&choix);
    if (choix==0)
        ret = serveur();
    else
        ret = client();
    printf("Retour : %d\n",ret);
#ifdef WIN32
    WSACleanup();
#endif
    return 0;
}



Explanations

	No explanations yet.