Weer een error :o (Voor iemand met verstand van Sockets)

Status
Niet open voor verdere reacties.

erikiej1

Gebruiker
Lid geworden
29 apr 2008
Berichten
138
Ik ben bezig te leren hoe Sockets te gebruiken. Khep een boek gedownload (O-oooh!) en daar staat dit voorbeeld in:

TCPClientEcho.c:

Code:
#include <stdio.h>
#include <winsock2.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#define RCVBUFSIZE 32

void DieWithError( char *erroMessage );

int main( int argc, char *argv[] )
{
    int sock;
    struct sockaddr_in echoServAddr;
    unsigned short echoServPort;
    char *servIP;
    char *echoString;
    char echoBuffer[RCVBUFSIZE];
    unsigned int echoStringLen;
    int bytesRcvd, totalBytesRcvd;
    
    if(( argc < 3 ) || ( argc > 4 ))
    {
         fprintf(stderr,"Usage: %s <Server IP> <Echo Word> [<Echo Port>]\n",argv[0]);
         exit(1);
    }
    
    servIP = argv[1];
    echoString = argv[2];
    
    if( argc==4)
    {
        echoServPort = atoi(argv[3]);
    }
    else 
    {
         echoServPort = 7; 
    }
    if((sock = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP))<0)
         DieWithError("socket() failed");
         
    memset(&echoServAddr,0,sizeof(echoServAddr));
    echoServAddr.sin_family      = Af_INET;
    echoServAddr.sin_addr.s_addr = inet_addr(servIP);
    echoServAddr.sin_port        = htons(echoServPort);
    
    if(connect(sock, ( struct sockaddr * ) &echoServAddr, sizeof(echoServAddr)) < 0 )
         DieWithError("connect() failed");
    
    echoStringLen = strlen(echoString);
    
    if(send(sock, echoString, echoStringLen, 0 )!=echoStringLen)
         DieWithError("send() sent a different number of bytes than expected");
         
    totalBytesRcvd = 0;
    printf("Received: ");
    while(totalBytesRcvd < echoStringLen)
    {
         if((bytesRcvd = recv(sock,echoBuffer,RCVBUFSIZE - 1, 0)) <= 0)
               DieWithError("recv() failed or connection closed prematurely");
         totalBytesRcvd += bytesRcvd;
         echoBuffer[bytesRcvd] = '\0';
         printf(echoBuffer);
    }
    
    printf("\n");
    
    close(sock);
    exit(0);
}

En DieWithError.c:

Code:
#include <stdio.h>
#include <stdlib.h>

void DieWithError(char *errorMessage )
{
     perror(errorMessage);
     exit(1);
}

Dit compileer ik in 1 project met Dev-C++ 4.9.9.2
maar deze error wordt weergegeven:

[Build Error] [TCPEchoClient.o] Error 1

Kan iemand helpen? :rolleyes:

bij voorbaat dank ;)
 
De functie DieWithError() uit DieWithError.c zal in elk geval niet beschikbaar zijn binnen het project. (daarvoor zou je wat meer over headers kunnen lezen)
 
Header file

Ik heb DieWithError.c verandert in DieWithError.h en in TCPEchoClient "include "DieWithError.h"" gezet. Nu geeft ie nog steeds dezelfde error...
 
Ik heb niet zoveel verstand van sockets, maar volgens mij moet dit echoServAddr.sin_family = Af_INET;
dit echoServAddr.sin_family = AF_INET; zijn.

Link je de winsock lib wel mee? Het is libwsock32.a geloof ik.
 
Hmz....

Ja, je hebt gelijd over dat Af_INET, dat was een typfoutje, die had ik zelf ook al ontdekt maar toen ik em verbeterde gaf die nog steeds dezelfde error, en volgens internet moest ik libws2_32.a meelinken en dat deed ik ook maar 't helpt niet...

Ik weet misschien zelf het probleem wel...
Dat programma is een Client die moet connecten met een server. Misschien ligt het eraan dat die server niet bestaat of zo. Want toen ik em met Borland C++ 5.5 compileerde wou het wel gewoon. Maar als ik dan de .exe bestand opstart, sluit ie gelijk zonder iets te doen af, dus ik denk dat ik de server eerst ook moet maken :p

Toch bedankt voor de moeite..;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan