luka93 (Normal User)
Newbie
Messaggi: 10
Iscritto: 01/11/2008
|
salve..sto realizzando un programma per esercitarmi col winsock però quando invio il messaggio non esegue il print..non ho capito perchè non va...aiutatemi perfavore..
SERVER-
Codice sorgente - presumibilmente C++ |
#include<windows.h> #include<stdio.h> #include "winsock2.h" main() { char buffer[256]; WSADATA wsaData; int iResult = WSAStartup( MAKEWORD(2,2), &wsaData ); if ( iResult != NO_ERROR ) printf("Error at WSAStartup()\n"); SOCKET m_socket; m_socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ); if ( m_socket == INVALID_SOCKET ) { printf( "Error at socket(): %ld\n", WSAGetLastError() ); WSACleanup(); return; } SOCKADDR_IN service; service.sin_family = AF_INET; service.sin_addr.s_addr = inet_addr( "127.0.0.1" ); service.sin_port = htons( 4000 ); if ( bind( m_socket, (SOCKADDR*) &service, sizeof(service) ) == SOCKET_ERROR ) { printf( "bind() failed.\n" ); closesocket(m_socket); return; } if ( listen( m_socket, 1 ) == SOCKET_ERROR ) printf( "Error listening on socket.\n"); SOCKET AcceptSocket; printf( "Attendere...\n" ); while (1) { AcceptSocket = SOCKET_ERROR; while ( AcceptSocket == SOCKET_ERROR ) { AcceptSocket = accept( m_socket, NULL, NULL ); } printf( "Client Connesso.\n"); m_socket = AcceptSocket; break; } char recvbuf[256]; recv(m_socket,recvbuf,sizeof(recvbuf), 0 ); if (recvbuf=="prova") { printf("OK.\n"); } system("pause"); return 0; }
|
CLIENT-
Codice sorgente - presumibilmente C++ |
#include <stdio.h> #include <winsock.h> #include <string.h> int main() { SOCKET clientsocket; SOCKADDR_IN addr; char messaggio[80]; short port; long ip[50]; WORD wVersionRequested = MAKEWORD(2,2); WSADATA wsaData; WSAStartup(wVersionRequested, &wsaData); port = 4000; printf("Inserire Ip:"); gets(ip); addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr(ip); addr.sin_port = htons(port); clientsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (connect(clientsocket, (LPSOCKADDR)&addr, sizeof(addr)) < 0) printf("Errore nella connessione con il Server"); printf("Comando:"); gets(messaggio); send(clientsocket,messaggio,sizeof(messaggio), 0 ); WSACleanup(); system("pause"); return 0; }
|
Ultima modifica effettuata da luka93 il 02/11/2008 alle 8:42 |
|
WARRIOR (Ex-Member)
Guru
Messaggi: 627
Iscritto: 30/03/2007
|
Cosa scrivi quando richiedi il comando nel client? fai una prova con questo: "prova\n".
|
|
luka93 (Normal User)
Newbie
Messaggi: 10
Iscritto: 01/11/2008
|
perchè???ke cambia se va a capo rigo??
PS: non va lo stesso
PS2:cmq scrivo "prova"
Ultima modifica effettuata da luka93 il 02/11/2008 alle 12:43 |
|
luka93 (Normal User)
Newbie
Messaggi: 10
Iscritto: 01/11/2008
|
Perfavore aiutatemi..
|
|
gioser (Normal User)
Pro
Messaggi: 111
Iscritto: 03/10/2008
|
Postato originariamente da luka93:
SERVER-
Codice sorgente - presumibilmente C/C++ |
if (recvbuf=="prova")
{
printf("OK.\n");
}
|
|
sicuramente questo confronto non funziona.
usa la strcmp()
ma per debuggare ti consiglio di stampare quello che ricevi
Un'altra cosetta.. magari nel client metti la WSACleanpu() dopo la system("pause");
Ciao |
|
luka93 (Normal User)
Newbie
Messaggi: 10
Iscritto: 01/11/2008
|
si ho provato con strcmp ma non va
ecco:
Codice sorgente - presumibilmente Plain Text |
recv(m_socket,recvbuf,sizeof(recvbuf), 0 );
if( strcmp( recvbuf, "prova" ) == 0 )
printf( "Ciao\n" )
|
comunque non voglio stampare quello ke invio,ma voglio che stampi la parola gia predefinita a seconda del mio ordine
|
|
gioser (Normal User)
Pro
Messaggi: 111
Iscritto: 03/10/2008
|
non importa cosa dovrà fare il programma.
Tu hai bisogno di capire come mai non funziona.
Per questo ti consiglio di stampare la stringa ricevuta dal server: per capire se il problema è la recv oppure la if.
Una volta individuato e risolto il problema, puoi togliere la stampa della stringa ricevuta.
ciao
|
|
luka93 (Normal User)
Newbie
Messaggi: 10
Iscritto: 01/11/2008
|
ho provato anche a stampare ciò che è contenuto in recvbuf:
Codice sorgente - presumibilmente Plain Text |
ma invece della parola inviata escono dei simboli strani.
|
|
gioser (Normal User)
Pro
Messaggi: 111
Iscritto: 03/10/2008
|
significa che esci dalla recv senza ricevere nulla.
controlla il valore di ritorno della recv.
hai provato a spostare la WSACleanup() dopo la system("pause") nel client?
|
|