TCPIP-serveri

Akiro 28.05.01 18:47

Pieni esimerkki kuinka TCP/IPtä käytetään win32:ssa, talk-serverin alku.

 Tekstiversio  Arvo: 5 (8 ääntä)  Äänestä: +  -
/* Ikävä kyllä täysin kommentoimaton vieläkin*/

#define _MT_
#include <stdio.h>
#include <windows.h>
#include <winsock2.h>
#include <process.h>

void serverthread(void *);

int main()
{
    char *protocol,*client_ip;
    int sd,ns,addrlen;
    struct sockaddr_in serv,cli;
    struct servent *ser;
    struct hostent *cli_ent;
    WSADATA wsaData;

    WSAStartup(0x0101, &wsaData);

    if((sd = socket(AF_INET,SOCK_STREAM,0)) < 0) {
        printf("error in socket()\n");
        exit(2);
    }
    serv.sin_family = AF_INET;
    serv.sin_port = htons(10666);
    serv.sin_addr.s_addr = INADDR_ANY;
//    bzero(&(serv.sin_zero),8);
    if(bind(sd, (struct sockaddr *) &serv,sizeof(serv)) < 0) {
        closesocket(sd);
        printf("Error in bind()");
        exit(3);
    }

    printf("Serveri toiminassa\n");

    while (1){
        if(listen(sd,2) != 0) {
            printf("Error in listen()");
            exit(4);
        }
        addrlen = sizeof(cli);
        if((ns = accept(sd,(struct sockaddr *)&cli,&addrlen)) < 0) {
            printf("Error in accept()");
            exit(5);
        }
        client_ip = inet_ntoa(cli.sin_addr);
        cli_ent = gethostbyaddr((char *)&cli.sin_addr.S_un.S_addr,4,PF_INET);
        printf("Host: %s[%s], Port: %d\n",cli_ent->h_name,client_ip,cli.sin_port);
        _beginthread(serverthread,4096,(void *) ns);
    }
    closesocket(sd);
    WSACleanup();
    exit(0);
}

void serverthread(void *param)
{
    int socket,antal;
    char cbuf[99];

    socket = (int) param;
    printf("Klientti kutsuu:\n");
    do{
                if((antal = recv(socket,&cbuf,99,0)) < 0) {
            printf("Error in read()");
            exit(5);
        }
                cbuf[antal] = '\0';
                printf("Cli: %s\n",cbuf);
                if(strcmp(cbuf,"slut")){
                        printf("Kirjoita vastaus:\n>");
            gets(cbuf);
                        send(socket,&cbuf,strlen(cbuf)+1,0);
        }
    }while (strcmp(cbuf,"slut"));

        printf("Lopetus...\n");
    closesocket(socket);
    _endthread();
}

pikkumyy 14:04 29.4.03 
Vai että "slut".. Akirohan on hävyttömäksi ruvennut
ZcMander 19:50 30.8.03 
HYVÄ