PDA

View Full Version : [c/c++] Errore di connessione


bouncey2k
19-04-2006, 19:00
Ho creato un server che apre una determinata porta (21). Con il client (telnet) provo a connettermi e la connessione va a buon fine tale che mi arriva un messaggio con scritto "Ciao. Sono attivo". Appena fatto ciò, lo schermo di telnet rimane nero e non mi permette di mandare comandi. Perché?
Vi posto il codice


#include <stdio.h>
#include <winsock2.h>
// Ricordarsi di linkare la libreria libwsock32.a

int main (int argn, char **argv)
{

// dichiaro le variabili

WORD data1;
WSADATA data2;

SOCKET mysock, client;
struct sockaddr_in mysock_addr, client_addr;

int backlog = SOMAXCONN;
int addr_len;
char mex[] = "Ciao. Sono attivo.\n\n";

data1 = MAKEWORD (2, 0);
WSAStartup (data1, &data2);

// Creo e definisco il socket

mysock = socket (AF_INET, SOCK_STREAM, 0);

mysock_addr.sin_family = AF_INET;
mysock_addr.sin_port = htons (21);
mysock_addr.sin_addr.s_addr = INADDR_ANY;


bind (mysock, (struct sockaddr*)&mysock_addr, sizeof (struct sockaddr_in));
listen (mysock, backlog);
// printf ("In attesa di una connessione...\n");

addr_len = sizeof (struct sockaddr);
client = accept (mysock, (struct sockaddr*)&client_addr, &addr_len);

send (client, mex, strlen(mex), 0);

while (EOF != getchar());

closesocket(client);
closesocket(mysock);

WSACleanup();
return(0);
}

cionci
19-04-2006, 19:15
Perchè il programma una volta inviato il messaggio resta in attesa di EOF (CTRL+Z) sullo standard input del server...

while (EOF != getchar());

In pratica invia il messaggio e non fa niente altro...

Infatti prova a sostituire alla riga sopra queste:

do
{
recv(client, &c, 1, 0);
putchar(c);
}
while(c != 'x');

bouncey2k
20-04-2006, 17:15
provo e ti faccio sapere.