Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - help me pls winsock
Forum - C/C++ - help me pls winsock

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
luka93 (Normal User)
Newbie


Messaggi: 10
Iscritto: 01/11/2008

Segnala al moderatore
Postato alle 11:34
Sabato, 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++

  1. #include<windows.h>
  2. #include<stdio.h>
  3. #include "winsock2.h"
  4.  
  5. main()
  6. {
  7.    char buffer[256];
  8.  
  9.     WSADATA wsaData;
  10.     int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );
  11.     if ( iResult != NO_ERROR )
  12.         printf("Error at WSAStartup()\n");
  13.  
  14.  
  15.  
  16.  
  17.     SOCKET m_socket;
  18.     m_socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
  19.  
  20.     if ( m_socket == INVALID_SOCKET ) {
  21.         printf( "Error at socket(): %ld\n", WSAGetLastError() );
  22.         WSACleanup();
  23.         return;
  24.     }
  25.  
  26.  
  27.     SOCKADDR_IN service;
  28.  
  29.     service.sin_family = AF_INET;
  30.     service.sin_addr.s_addr = inet_addr( "127.0.0.1" );
  31.     service.sin_port = htons( 4000 );
  32.  
  33.     if ( bind( m_socket, (SOCKADDR*) &service, sizeof(service) ) == SOCKET_ERROR ) {
  34.         printf( "bind() failed.\n" );
  35.         closesocket(m_socket);
  36.         return;
  37.     }
  38.  
  39.  
  40.     if ( listen( m_socket, 1 ) == SOCKET_ERROR )
  41.         printf( "Error listening on socket.\n");
  42.  
  43.  
  44.  
  45.     SOCKET AcceptSocket;
  46.  
  47.     printf( "Attendere...\n" );
  48.     while (1) {
  49.         AcceptSocket = SOCKET_ERROR;
  50.         while ( AcceptSocket == SOCKET_ERROR ) {
  51.             AcceptSocket = accept( m_socket, NULL, NULL );
  52.         }
  53.         printf( "Client Connesso.\n");
  54.         m_socket = AcceptSocket;
  55.         break;
  56.     }
  57.    
  58.     char recvbuf[256];
  59.  
  60.         recv(m_socket,recvbuf,sizeof(recvbuf), 0 );
  61.         if (recvbuf=="prova")
  62.         {
  63.             printf("OK.\n");
  64.            
  65.         }
  66.        
  67.    
  68.  system("pause");
  69.  return 0;
  70. }


CLIENT-
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2.  #include <winsock.h>
  3.  #include <string.h>
  4.  
  5.  int main()
  6. {
  7.  SOCKET clientsocket;
  8.  SOCKADDR_IN addr;
  9.  
  10.  char messaggio[80];
  11.  short port;
  12.  long ip[50];
  13.  
  14.      
  15.   WORD wVersionRequested = MAKEWORD(2,2);
  16.   WSADATA wsaData;
  17.   WSAStartup(wVersionRequested, &wsaData);
  18.  
  19.   port = 4000;
  20.  
  21.   printf("Inserire Ip:");
  22.   gets(ip);    
  23.   addr.sin_family = AF_INET;
  24.   addr.sin_addr.s_addr = inet_addr(ip);
  25.   addr.sin_port = htons(port);
  26.  
  27.   clientsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  28.   if (connect(clientsocket, (LPSOCKADDR)&addr, sizeof(addr)) < 0)
  29.   printf("Errore nella connessione con il Server");
  30.  
  31.  
  32.     printf("Comando:");
  33.     gets(messaggio);
  34.     send(clientsocket,messaggio,sizeof(messaggio), 0 );
  35.    
  36.    
  37.  
  38.   WSACleanup();
  39.   system("pause");
  40.   return 0;
  41.    }


Ultima modifica effettuata da luka93 il 02/11/2008 alle 8:42
PM Quote
Avatar
WARRIOR (Ex-Member)
Guru


Messaggi: 627
Iscritto: 30/03/2007

Segnala al moderatore
Postato alle 12:32
Domenica, 02/11/2008
Cosa scrivi quando richiedi il comando nel client? fai una prova con questo: "prova\n".


Continuerò a correre, perchè ci sarà sempre qualcuno migliore di me.

Evvia i libri, evitate gli stolti che non li integrano nella loro vita.

http://www.mentisferiche.it

Luca Tedesco
PM Quote
Avatar
luka93 (Normal User)
Newbie


Messaggi: 10
Iscritto: 01/11/2008

Segnala al moderatore
Postato alle 12:39
Domenica, 02/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
PM Quote
Avatar
luka93 (Normal User)
Newbie


Messaggi: 10
Iscritto: 01/11/2008

Segnala al moderatore
Postato alle 14:22
Domenica, 02/11/2008
Perfavore aiutatemi..

PM Quote
Avatar
gioser (Normal User)
Pro


Messaggi: 111
Iscritto: 03/10/2008

Segnala al moderatore
Postato alle 8:43
Lunedì, 03/11/2008
Testo quotato

Postato originariamente da luka93:
SERVER-
Codice sorgente - presumibilmente C/C++

  1. if (recvbuf=="prova")
  2.         {
  3.             printf("OK.\n");
  4.            
  5.         }






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 :)

PM Quote
Avatar
luka93 (Normal User)
Newbie


Messaggi: 10
Iscritto: 01/11/2008

Segnala al moderatore
Postato alle 10:24
Lunedì, 03/11/2008
si ho provato con strcmp ma non va
ecco:
Codice sorgente - presumibilmente Plain Text

  1. recv(m_socket,recvbuf,sizeof(recvbuf), 0 );
  2.         if( strcmp( recvbuf, "prova" ) == 0 )
  3.         printf( "Ciao\n" )


comunque non voglio stampare quello ke invio,ma voglio che stampi la parola gia predefinita a seconda del mio ordine

PM Quote
Avatar
gioser (Normal User)
Pro


Messaggi: 111
Iscritto: 03/10/2008

Segnala al moderatore
Postato alle 11:46
Lunedì, 03/11/2008
8-|

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 :)

PM Quote
Avatar
luka93 (Normal User)
Newbie


Messaggi: 10
Iscritto: 01/11/2008

Segnala al moderatore
Postato alle 13:34
Lunedì, 03/11/2008
ho provato anche a stampare ciò che è contenuto in recvbuf:
Codice sorgente - presumibilmente Plain Text

  1. printf("%s",recvbuf);


ma invece della parola inviata escono dei simboli strani.

PM Quote
Avatar
gioser (Normal User)
Pro


Messaggi: 111
Iscritto: 03/10/2008

Segnala al moderatore
Postato alle 16:33
Lunedì, 03/11/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?


PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo