Avatar billede mora Nybegynder
17. februar 2002 - 21:22 Der er 4 kommentarer og
1 løsning

Conn. timed out [irc]

Jeg bruger følgende kilde til at forbinde til en IRC server, men det resulter i timeout, yderligere hvor kommer de linjer der ikke starter med RECV fra ? (notice og CE) jeg har jo cout << "RECV ...

___Kilden____
#include <iostream.h>
#include <winsock.h>

void main()
{
char        tpkt1[17] = "NICK MORACPP\n\n";  /* message to send to host */
char        tpkt2[50] = "USER MORACPP unresolved 193.163.220.3 :Mora\n\n";  /* message to send to host */

//  WriteLn('NICK '+nick);
//  WriteLn('USER '+nick+' unresolved '+server+' :'+navn);

char        servername[80]="193.163.220.3";    /* pointer to name of server */
struct      hostent *h;                        /* getnamebyhost info returned */
struct      sockaddr_in sa;                    /* socket address */
int        fd;                                /* socket descriptor */
short      portnum=6667;                        /* port number of server */
int        funcstatus;                        /* returned status from socket functions */
int        inlen;                              /* length of input message */
char        inbuf[200000];                      /* input message buffer */
WSADATA    wsaData;                            /* Winsock parameters */

WSAStartup( 0x0101, &wsaData);

/* get host address */
h = gethostbyname(servername);
if (h == NULL) {
      cout << "gethostbyname error";
      exit(0);
      }


/*  build socket structure  */
memcpy((char *)&sa.sin_addr,(char *)h->h_addr, h->h_length);
sa.sin_family = h->h_addrtype;
sa.sin_port = htons(portnum);

/*  allocate an open socket */
fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (fd == -1) {
      cout << "socket creation error";
      cin.ignore();
      exit(0);
      }
else
      cout << "socket created\n";



/*  connect to the server */
if (connect(fd, (struct sockaddr *)&sa, sizeof sa) < 0) {
      cout << "connect error";
        cin.ignore();
      exit(0);
      }
cout << "connected\n";

/* send a packet to the server */
funcstatus = send(fd, tpkt1, strlen(tpkt1)+1, 0 );
if (funcstatus == -1) {
      cout << "Error sending data1 to server\n";
      cin.ignore();
      exit(0);
      }
cout << "packet1 sent to server\n";

funcstatus = send(fd, tpkt2, strlen(tpkt2)+1, 0 );
if (funcstatus == -1) {
      cout << "Error sending data2 to server\n";
      cin.ignore();
      exit(0);
      }
cout << "packet2 sent to server\n";

/* wait for a reply */

for (int i = 0; i<5; i++){
inlen = recv(fd, inbuf, 200000, 0);
if (inlen < 0)
      cout << "Error receiving data from the server\n";
else
      cout << "RECV : " << inbuf;
}

WSACleanup();
cin.ignore();
}




___ Følgende kommer ___

socket created
connected
packet1 sent to server
packet2 sent to server
RECV : NOTICE AUTH :*** Looking up your hostname...
RECV : NOTICE AUTH :*** Checking Ident
NOTICE AUTH :*** Found your hostname
RECV : NOTICE AUTH :*** Got Ident response
CE AUTH :*** Found your hostname
RECV : ERROR :Closing Link: MORACPP[BestLord@255.255.255.255] (Connection Timed
Out)
RECV : ERROR :Closing Link: MORACPP[BestLord@255.255.255.255] (Connection Timed
Out)


___En korrekt tilslutning fra delphi___
NOTICE AUTH :*** Looking up your hostname...
NOTICE AUTH :*** Found your hostname, cached
NOTICE AUTH :*** Checking Ident
NOTICE AUTH :*** Got Ident response
:irc.inet.tele.dk 001 GnuBot :Welcome to the Internet Relay Network GnuBot



Ident programmet er ikke det samme, men da serveren svarer "NOTICE AUTH :*** Got Ident response" tror jeg næppe det er fejlen.
Avatar billede - Nybegynder
18. februar 2002 - 22:52 #1
Notice og Auth er det du får tilbage fra serveren, og som bliver lagt i din inbuf og udskrevet sammen med "RECV:".

Det ser ud til at serveren vil have en eller anden besked som den ikke får og derfor sker der en timeout.
Avatar billede mora Nybegynder
19. februar 2002 - 01:18 #2
Hmm, jeg prøvede lige at smide en test server op, der bare skrev de info den modtod til en memo ...

den motager intet fra den c++ kode, men modtager fint de 2 linjer ra min delphi version ...

er det muligt at lave en sleep ??
Avatar billede - Nybegynder
19. februar 2002 - 05:34 #3
Har lige sat en server op og den modtager fint de to strenge fra c++ koden.

du kan lave en sleep hvis du inkluderer <dos.h>
sleep(2);  //sleep i to sekunder
Avatar billede mora Nybegynder
19. februar 2002 - 10:16 #4
det fatter jeg sku ik helt :/

min server får ikke de 2 linjer :/
men den connecter fint ...

______
#include <iostream.h>
#include <winsock.h>
#include <dos.h>

void main()
{
char        tpkt1[17] = "NICK MORACPP";  /* message to send to host */
char        tpkt2[50] = "USER MORACPP unresolved mora :Mora";  /* message to send to host */

//  WriteLn('NICK '+nick);
//  WriteLn('USER '+nick+' unresolved '+server+' :'+navn);

char        servername[80]="mora";    /* pointer to name of server */
struct      hostent *h;                        /* getnamebyhost info returned */
struct      sockaddr_in sa;                    /* socket address */
int        fd;                                /* socket descriptor */
short      portnum=5000;                        /* port number of server */
int        funcstatus;                        /* returned status from socket functions */
int        inlen;                              /* length of input message */
char        inbuf[200000];                      /* input message buffer */
WSADATA    wsaData;                            /* Winsock parameters */

WSAStartup( 0x0101, &wsaData);

/* get host address */
h = gethostbyname(servername);
if (h == NULL) {
      cout << "gethostbyname error";
      exit(0);
      }


/*  build socket structure  */
memcpy((char *)&sa.sin_addr,(char *)h->h_addr, h->h_length);
sa.sin_family = h->h_addrtype;
sa.sin_port = htons(portnum);

/*  allocate an open socket */
fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (fd == -1) {
      cout << "socket creation error";
      cin.ignore();
      exit(0);
      }
else
      cout << "socket created\n";



/*  connect to the server */
if (connect(fd, (struct sockaddr *)&sa, sizeof sa) < 0) {
      cout << "connect error";
        cin.ignore();
      exit(0);
      }
cout << "connected\n";

sleep(20);

/* send a packet to the server */
funcstatus = send(fd, tpkt1, strlen(tpkt1)+1, 0 );
if (funcstatus == -1) {
      cout << "Error sending data1 to server\n";
      cin.ignore();
      exit(0);
      }
cout << "packet1 sent to server\n";

funcstatus = send(fd, tpkt2, strlen(tpkt2)+1, 0 );
if (funcstatus == -1) {
      cout << "Error sending data2 to server\n";
      cin.ignore();
      exit(0);
      }
cout << "packet2 sent to server\n";

/* wait for a reply */

for (int i = 0; i<10; i++){
inlen = recv(fd, inbuf, 200000, 0);
if (inlen < 0)
      cout << "Error receiving data from the server\n";
else
      cout << "RECV : " << inbuf;
}

WSACleanup();
cin.ignore();
}
Avatar billede mora Nybegynder
19. februar 2002 - 20:21 #5
bruger et andet socket fætter den virker :P
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

SOS International

Cisco Call Manager Specialist

Capgemini Danmark A/S

IGNITE Graduate Program 2026

Capgemini Danmark A/S

SAP S/4HANA Finance Lead

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Lead DevSecOps