nessuno ho risolto il problema ho compilato il file con mingw e non mi ha dato problemi però ora ho un'altro problema ho scritto sia il client che il server e quando li compilo non mi da nessun errore però quando cerco di avviare i 2 exe il server rimane aperto mentre il client si chiude subito senza darmi errore....
ora vi posto i sorgenti se potete dirmi dove sto sbagliando e se ci vuole qualche aggiustatina
CLIENT
#include "stdio.h"
#include "winsock2.h"
#include "string.h"
#define files "prova1.txt"
int main()
{
//---Inizializza Winsock
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != NO_ERROR)
printf("Client: Errore WSAStartup().\n");
else
printf("Client: WSAStartup() e' OK.\n");
//--- Crea Socket
SOCKET m_socket;
m_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (m_socket == INVALID_SOCKET)
{
printf("Client: socket() - Errore al socket(): %ld\n", WSAGetLastError());
WSACleanup();
return 0;
}
else
printf("Client: socket() e' OK.\n");
//---Connessione al server
struct sockaddr_in clientService;
clientService.sin_family = AF_INET; //Famiglia protocollo TCP
clientService.sin_addr.s_addr = inet_addr("127.0.0.1"); //Ip a cui si connette il client
clientService.sin_port = htons(55555); //Porta aperta per la connessione al server
if (connect(m_socket, (SOCKADDR*)&clientService, sizeof(clientService)) == SOCKET_ERROR)
{
printf("Client: connessione() - Fallita la connessione.\n");
WSACleanup();
return 0;
}
//---Invia e riceve dati
int bytesSent;
int bytesRecv = SOCKET_ERROR;
char sendbuf[1024] ;
char recvbuf[1024] ;
bytesSent = send(m_socket, sendbuf, strlen(sendbuf), 0);
printf("Client: send() - Bytes Inviati: %ld\n", bytesSent);
while(bytesRecv == SOCKET_ERROR)
{
bytesRecv = recv(m_socket, recvbuf, 32, 0);
if (bytesRecv == 0 || bytesRecv == WSAECONNRESET)
{
printf("Client: Chiusa Connessione.\n");
break;
}
else
printf("Client: recv() e' OK.\n");
if (bytesRecv < 0)
return 0;
else
{
printf("Client: dati ricevuti sono \"%s\"\n", recvbuf);
printf("Client: Bytes ricevuti - %ld.\n", bytesRecv);
}
}
bytesSent = send (m_socket, sendbuf, strlen (sendbuf), 0);
if (bytesSent == SOCKET_ERROR)
printf("Client send() errore %ld \n", WSAGetLastError ());
else
{
printf ("Client: send () e' OK - Byte Inviati: %ld \n", bytesSent);
printf("Client: La stringa di prova inviata: \"%s\"\n", sendbuf);
}
FILE *fp;
char ch, *fbuff;
int indice, fileDim = 0;
bytesRecv = recv (m_socket, fbuff,strlen(fbuff), 0);
fp = fopen(files,"w");
fprintf(fp,"%s",files);
fclose;
WSACleanup();
return 0;
}
Server:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include "winsock2.h"
#define FILEs "prova.txt"
int main()
{
//---Inizializza Winsock
WORD wVersionRequested;
WSADATA wsaData;
int wsaerr; //Variabile che restituisce 1 se errore
wVersionRequested = MAKEWORD(2, 2);
wsaerr = WSAStartup(wVersionRequested, &wsaData);
if (wsaerr != 0)
{
printf("WinSock DLL non trovata \n");
return 0;
}
else
{
printf("Trovata Winsock DLL. \n");
printf("Stato: %s.\n", wsaData.szSystemStatus);
}
if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
{
printf("La DLL non supporta la versione di Winsock %u. %u!\n", LOBYTE(wsaData.wVersion),HIBYTE(wsaData.wVersion));
WSACleanup();
return 0;
}
else
{
printf("La DLL supporta la version di Winsock %u.%u\n!", LOBYTE(wsaData.wVersion),HIBYTE(wsaData.wVersion));
printf("La versione piu alta che e' in grado di supportare questa DLL e': %u.%u\n", LOBYTE(wsaData.wHighVersion), HIBYTE(wsaData.wHighVersion));
}
//--- Crea Socket
SOCKET m_socket;
m_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (m_socket == INVALID_SOCKET)
{
printf("Errore al socket():%ld\n", WSAGetLastError());
WSACleanup();
return 0;
}
else
{
printf("il Socket() e' OK!\n");
}
//---Connessione al server
//creiamo l'oggetto sockaddr_in e settiamo il valore
struct sockaddr_in service;
service.sin_family=AF_INET; //Famiglia di indirizzo internet
service.sin_addr.s_addr = inet_addr("127.0.0.1"); //Indirizzo IP della macchina
service.sin_port = htons(55555); //Porta su quale connettersi
//Chiamiamo la funzione bind
if (bind(m_socket, (SOCKADDR*)&service, sizeof(service)) == SOCKET_ERROR)
{
printf("bind() fallito: %ld.\n",WSAGetLastError());
closesocket(m_socket);
return 0;
}
else
{
printf("bind() e' OK!\n");
}
/* Server In connession */
if (listen(m_socket, 1) == SOCKET_ERROR)
printf("listen(): Errore socket listening %ld. \n", WSAGetLastError());
else
{
printf("listen() e' OK, Aspetto connessione....\n");
}
SOCKET AcceptSocket;
printf("Server: Aspetta che il client si connetta....\n");
printf("***Hint; Server avviato...avvia il tuo client...***\n");
while (1)
{
AcceptSocket = SOCKET_ERROR;
while (AcceptSocket == SOCKET_ERROR)
{
AcceptSocket = accept(m_socket, NULL, NULL);
}
//Altrimenti se accetta la connesione
printf("Server: Client Connesso!\n");
m_socket = AcceptSocket;
break;
}
int BytesSent;
int bytesRecv = SOCKET_ERROR;
char sendbuf [200];
char recvbuf [200] ;
//Invia stringa al client
printf ("Server: L'invio di alcuni dati..\n");
BytesSent = send (m_socket, sendbuf, strlen (sendbuf), 0);
if (BytesSent == SOCKET_ERROR)
printf("Server: send() errore %ld \n", WSAGetLastError ());
else
{
printf ("Server: send () e' OK. \n");
printf("Server: Byte Inviati: %ld \n", BytesSent);
}
//Riceve una stringa di prova dal cliente ... e cliente Deve inviare qualcosa lol ...
bytesRecv = recv (m_socket, recvbuf, 200, 0);
if (bytesRecv == SOCKET_ERROR)
printf ("Server: recv() errore %ld \n", WSAGetLastError());
else
{
printf ("Server: recv_() e' OK\n");
printf ("Server: dati ricevuti sono \"%s\"\n", recvbuf);
printf ("Server: Byte ricevuti: %ld \n", bytesRecv);
}
FILE *fp;
char ch, *fbuff;
int indice, fileDim = 0;
if((fp=fopen(FILEs,"r"))!=NULL)
{
//Si posizione alla ine del file
fseek(fp, 0, SEEK_END);
//Legge la posizione attuale
fileDim = ftell(fp);
//alloca la dimensione del buffer
fbuff = (char*)malloc(sizeof(char) * fileDim+1);
printf("Dimensione del file %s=%d\n",FILEs,fileDim);
//mi porto all'inizio del file
fseek(fp, 0, SEEK_SET);
//Copio il contenuto del file nel buffer
fread(fbuff, fileDim, 1, fp);
//invio il contenuto del buffer al client
BytesSent = send (m_socket,fbuff,strlen(fbuff),0);
if (BytesSent == SOCKET_ERROR)
printf("Server: File non inviato \n", WSAGetLastError ());
else
{
printf ("Server: File inviato \n");
printf("Server: Byte Inviati: %ld \n", BytesSent);
}
}
WSACleanup();
return 0;
}