Ciao ragazzi!! ho di nuovo bisogno del vostro aiuto.
ho iniziato a studiare i socket. una volta creato, bindato e connesso il server al client mi sono bloccato.
come prima prova vorrei che il mio client una volta connettosi al server mi chieda di inserire un testo di prova. Una volta inserito il testo di prova il server me lo stampa e mi chiuda la connessione.
sono arrivato al punto di riuscire a far ricevere al server il mio messaggio solo che me lo stampa in maniera strana. premetto che sono un principiante, potrei aver scritto delle assurdità. scusate per le eventuali ca..ate che ho scritto o fatto.
vi posto il mio codice:
CLIENT:
#include <stdio.h>
#include <windows.h>
#include <WinSock2.h>
#include <iostream>
#include <string>
#include <io.h>
#define PORT 1234
#define SERVERADDRESS "192.168.44.62"
#define MAXBUF 32
using namespace::std;
int main(void)
{
WSADATA wsa;
cout << ("inizializzazione windowsk ...(WSADATA)") << endl;
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
{
cout << ("Errore Codice di errore:% d", WSAGetLastError());
return 1;
}
int sd, fd, valread;
struct sockaddr_in server, client;
char buffer[MAXBUF];
char * client_address;
// apertura del server socket
if (((sd = socket(AF_INET, SOCK_STREAM, 0))) == -1)
{
cerr << "ERRORE NELLA CREAZIONE DEL SOCKET." << endl;
exit(-1);
}
else
{
cout << "apertura del socket.." << endl;
}
// preparazione dell' indirizzo locale del server
//memset(&server, '0', sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons(PORT);
server.sin_addr.s_addr = inet_addr(SERVERADDRESS); //htonl(INADDR_ANY);
if (connect(sd, (struct sockaddr *)&server, sizeof(server)) < 0)
{
cout << "\nCconnessione fallita." << endl;
return -1;
}
cout << "cosa vuoi inviare? " << endl;
char *stringa;
cin >> stringa;
if (send(sd, stringa, sizeof(stringa), 0) == -1)
{
cout << "errore, non ho inviato il tuo messaggio.";
return 1;
exit(1);
}
else
{
cout << "messaggio inviato" << endl;
//valread = read(sd, buffer, 1024);
//printf("%s\n", buffer);
system("pause");
return 0;
}
}
SERVER:
#include <errno.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <iostream>
#include <string>
#include <string.h>
#define SERVERPORT 1234
#define SERVERADDRESS "192.168.44.62"
#define MAXBUF 32
using namespace::std;
int main(void)
{
int fd;
int sd = 0, valread;
struct sockaddr_in server, client;
char buffer[MAXBUF];
char * client_address;
// apertura del server socket
if (((sd = socket(AF_INET, SOCK_STREAM, 0))) == -1)
{
cerr << "ERRORE NELLA CREAZIONE DEL SOCKET." << endl;
exit(-1);
}
else
{
cout << "apertura del socket.." << endl;
}
// preparazione dell' indirizzo locale del server
server.sin_family = AF_INET;
server.sin_port = htons(SERVERPORT);
server.sin_addr.s_addr = inet_addr(SERVERADDRESS); //htonl(INADDR_ANY);
if ((bind(sd, (struct sockaddr*) &server, (sizeof server))) == -1)
{
cout << "errore nel bind della socket";
getchar(); //system("pause");
exit(-1);
}
else
{
cout << "sto bindando il server.." << endl;
}
listen(sd, 1);
int client_len;
client_len = sizeof client;
cout << "in attesa di una connessione..:" << endl;
while (1)
{
if ((fd = accept(sd, (struct sockaddr *)&client, (socklen_t*)&client_len)) == -1)
{
cout << "errore accept server" << endl;
getchar();// system("pause");
exit(-1);
}
else
{
cout << "sto asspettando una connessione\n" << endl;
cout << "connesso sul server all' indirizzo: ";
cout << ("ip client: %s\n", inet_ntoa(client.sin_addr)) << endl;
//getchar();
//cout << "inserisci il messaggio che vuoi inviare al tuo socio: " << endl;
//char *valoreinserito[256];
//cin >> valoreinserito;
char *stringa[256];
//valoreinserito = stringa;
if(read(fd, stringa, sizeof(stringa, 256)) == -1)
{
cout << "errore nella ricezione del messaggio" << endl;
close(fd);
exit(1);
}
else
{
//system("pause");
//memset(stringa, '\0', sizeof(stringa));
printf( "%s\n",stringa);
//cout << *stringa;
//send(fd, stringa, strlen(stringa), 0);
//cout << "hai inviato il messaggio eheh"
close(fd);
return 0;
}
}
}
return 0;
}
OUTPUT SERVER:
apertura del socket..
sto bindando il server..
in attesa di una connesione..:
sto aspettando una connessione
connesso sul server all' indirizzo: 192.168.44.49
CIAO (oltre al CIAO mi stampa dei caratteri strani non riconosciuti e non so cosa sono e se li provo ad incollare non li incolla.
OUTPUT CLIENT:
inizializzazione windowsk ...(WSADATA)
apertura del socket..
cosa vuoi inviare?
CIAO
messaggio inviato
Premere un tasto per continuare . . .
Ora io con questo thread vi chiedo gentilmente se sapreste dirmi cosa c'è che non va nel mio codice, il perchè mi stampa quel CIAO in maniera assurda e in che modo potrei migliorarlo, se riuscite a darmi qualche delucidazione riguardo ai socket per favore.
avviso che sto studiando e imparando da solo. sono partito da 0 e spero che un giorno riuscirò a iscrivermi alla scuola serale di informatica.
con questo vi ringrazio in anticipo e spero nel sempre mitico aiuto di questo forum.