MadMax0 Temat założony przez niniejszego użytkownika |
Prosty jednokierunkowy chat z wykorzystaniem gniazd (socket) » 2018-03-21 12:04:34 Dzień dobry, kod serwera: #include <stdio.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <string.h>
#define MYPORT 3490
int main( int argc, char * argv ) { struct sockaddr_in my_addr; struct sockaddr_in cli_addr; int sockfd; int newsockfd; socklen_t clilen; int control; char client_message[ 2000 ]; char buffer[ 256 ]; sockfd = socket( AF_INET, SOCK_STREAM, 0 ); my_addr.sin_family = AF_INET; my_addr.sin_port = htons( MYPORT ); my_addr.sin_addr.s_addr = INADDR_ANY; memset( &( my_addr.sin_zero ), '0', 8 ); bind( sockfd,( struct sockaddr * ) & my_addr, sizeof( my_addr ) ); listen( sockfd, 5 ); clilen = sizeof( cli_addr ); if( newsockfd = accept( sockfd,( struct sockaddr * ) & cli_addr, & clilen ) < 0 ) { printf( "Unable to connect" ); } else { printf( "Connected with %s", inet_ntoa( cli_addr.sin_addr ) ); } while(( control = recv( newsockfd, client_message, 2000, 0 ) ) > 0 ) { printf( "%s", client_message ); } if( control == 0 ) printf( "Disconneted" ); if( control == - 1 ) printf( "Error" ); }
kod klienta
#include <stdio.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <string.h>
int main( int argc, char * argv[] ) { int n; int client; int dest_port = 3490; char message[ 1000 ], server_reply[ 2000 ]; struct sockaddr_in server_addr; client = socket( AF_INET, SOCK_STREAM, 0 ); server_addr.sin_family = AF_INET; server_addr.sin_port = htons( dest_port ); server_addr.sin_addr.s_addr = inet_addr( "127.0.0.1" ); memset( &( server_addr.sin_zero ), '0', 8 ); connect( client,( struct sockaddr * ) & server_addr, sizeof( server_addr ) ); printf( "Podaj wiadomosc: " ); scanf( "%s", message ); if( send( client, message, strlen( message ), 0 ) < 0 ) printf( "Send failed" ); }
Serwer działa prawidłowo, tzn. nasłuchuje na danym porcie, jednak podczas uruchomienia programu klienta, serwer odpowiada następująco: Connected with 127.0.0.1 Error. Tzn, że realizowana jest ostatnia linijka mojego kodu serwera, tzn., że funkcja recv nieprawidłowo odebrała to co klient chce wysłać. Czy moglibyście mnie naprowadzić na rozwiązanie tego problemu? |
|
pekfos |
» 2018-03-21 19:09:58 if( newsockfd = accept( sockfd,( struct sockaddr * ) & cli_addr, & clilen ) < 0 )
|
Zapomniałeś nawiasu. |
|
MadMax0 Temat założony przez niniejszego użytkownika |
» 2018-03-21 19:49:44 Zdążyłem już rozpoznać problem poprzez wygooglowanie errora, który wyrzucał mi recv (Socket operation on non-socket). if( newsockfd = accept( sockfd,( struct sockaddr * ) & cli_addr, & clilen ) < 0 ) powyższa linijka nie tworzy prawidłowo nowego socketu, ponieważ, jak słusznie zauważył pekfos, brakuje tutaj nawiasu. Dla podpowiedzi podam, że trzeba sprawdzić co ma większy priorytet - przypisanie wartości czy sprawdzenie warunku (==, >, <) Dziękuje pekfos za odpowiedź. Pozdrawiam |
|
« 1 » |