Jocker_89
04-08-2012, 17:58
Aprendo due istanze di VS ho fatto partire i rispettivi .exe "Release" ma, mentre il Server svolge tutte le istruzioni fino a stampare sul prompt "Arrivato qua1.2", il client non supera la connect() stampando sul prompt "Errore connect al server".
Il server poi, quando ho compilato per la Release, mi aveva chiesto di poter effettuare connessioni nella rete domestica (io ho acconsentito), mentre il client non ha chiesto nulla.
Non sono in grado di vedere l'errore.
Il codice originario è una "traduzione" da una versione per GNU/Linux.
Riporto i frammenti di codice del server e del client.
Server:
#include "stdafx.h"
//#include "confsala.h"
//#include "helper.h"
//#include <Windows.h> /// sleep(milliseconds)
//#include <WinSock.h>
//#include <stdlib.h>
void main() {
SOCKET sock;
SOCKET sock_a; ///sock_a -> socket successivo all'accept
struct sockaddr_in server; /// socket address structure
struct sockaddr_in client; /// client address structure
char buff[MAX_DIM];
if(WSAStartup(MAKEWORD(1,1), &wsaData) != 0 ){
printf("errore in WSAStartup()\n");
exit(EXIT_FAILURE);
}
if( ( sock = socket(AF_INET, SOCK_STREAM, 0) ) ==INVALID_SOCKET ){
printf("errore creazione socket\n");
getchar();
exit(1);
}
memset(&server, 0, sizeof(server)); // azzeramento valori del sockaddr_in server
server.sin_family = AF_INET;
server.sin_addr.s_addr = htonl(INADDR_ANY);
server.sin_port = htons(25000);
if( bind(sock, (struct sockaddr *)&server, sizeof(server)) == SOCKET_ERROR ){
printf("Errore bind \n");
getchar();
exit(1);
}
if( listen(sock, CODA) == SOCKET_ERROR ){
printf("Errore listen\n");
getchar();
exit(1);
}
printf("Arrivato qua1");
while(1) {
printf("Arrivato qua1.2");
length = sizeof(struct sockaddr_in);
if( (sock_a = accept(sock, (struct sockaddr*)&client, &length) ) == INVALID_SOCKET ){
printf(" Errore accept()\n");
getchar();
exit(1);
}
printf("Arrivato qua2");
...
client:
#include "stdafx.h"
//#include "confsala.h"
//#include "helper.h"
//#include <Windows.h> /// sleep(milliseconds)
//#include <WinSock.h>
//#include <stdlib.h>
void main() {
int ds_sock, length, res;
struct sockaddr_in server;
WSADATA wsaData; // struttura Windows Sockets API := informazioni riguardanti l'implementazione
char buff1[MAX_DIM];
if(WSAStartup(MAKEWORD(1,1), &wsaData) != 0 ){
printf("errore in WSAStartup()\n");
exit(EXIT_FAILURE);
}
if ( (ds_sock = socket(AF_INET, SOCK_STREAM, 0) ) == INVALID_SOCKET) {
printf("errore creazione socket client\n");
getchar();
exit(1);
}
memset(&server, 0, sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons(25000);
server.sin_addr.s_addr =htonl(INADDR_ANY);
if( (res = connect(ds_sock,(struct sockaddr*) &server,sizeof(server)) ) == SOCKET_ERROR){
printf("Errore connect al server\n");
getchar();
exit(1);
}
...
Vi ringrazio per l'attenzione!
Il server poi, quando ho compilato per la Release, mi aveva chiesto di poter effettuare connessioni nella rete domestica (io ho acconsentito), mentre il client non ha chiesto nulla.
Non sono in grado di vedere l'errore.
Il codice originario è una "traduzione" da una versione per GNU/Linux.
Riporto i frammenti di codice del server e del client.
Server:
#include "stdafx.h"
//#include "confsala.h"
//#include "helper.h"
//#include <Windows.h> /// sleep(milliseconds)
//#include <WinSock.h>
//#include <stdlib.h>
void main() {
SOCKET sock;
SOCKET sock_a; ///sock_a -> socket successivo all'accept
struct sockaddr_in server; /// socket address structure
struct sockaddr_in client; /// client address structure
char buff[MAX_DIM];
if(WSAStartup(MAKEWORD(1,1), &wsaData) != 0 ){
printf("errore in WSAStartup()\n");
exit(EXIT_FAILURE);
}
if( ( sock = socket(AF_INET, SOCK_STREAM, 0) ) ==INVALID_SOCKET ){
printf("errore creazione socket\n");
getchar();
exit(1);
}
memset(&server, 0, sizeof(server)); // azzeramento valori del sockaddr_in server
server.sin_family = AF_INET;
server.sin_addr.s_addr = htonl(INADDR_ANY);
server.sin_port = htons(25000);
if( bind(sock, (struct sockaddr *)&server, sizeof(server)) == SOCKET_ERROR ){
printf("Errore bind \n");
getchar();
exit(1);
}
if( listen(sock, CODA) == SOCKET_ERROR ){
printf("Errore listen\n");
getchar();
exit(1);
}
printf("Arrivato qua1");
while(1) {
printf("Arrivato qua1.2");
length = sizeof(struct sockaddr_in);
if( (sock_a = accept(sock, (struct sockaddr*)&client, &length) ) == INVALID_SOCKET ){
printf(" Errore accept()\n");
getchar();
exit(1);
}
printf("Arrivato qua2");
...
client:
#include "stdafx.h"
//#include "confsala.h"
//#include "helper.h"
//#include <Windows.h> /// sleep(milliseconds)
//#include <WinSock.h>
//#include <stdlib.h>
void main() {
int ds_sock, length, res;
struct sockaddr_in server;
WSADATA wsaData; // struttura Windows Sockets API := informazioni riguardanti l'implementazione
char buff1[MAX_DIM];
if(WSAStartup(MAKEWORD(1,1), &wsaData) != 0 ){
printf("errore in WSAStartup()\n");
exit(EXIT_FAILURE);
}
if ( (ds_sock = socket(AF_INET, SOCK_STREAM, 0) ) == INVALID_SOCKET) {
printf("errore creazione socket client\n");
getchar();
exit(1);
}
memset(&server, 0, sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons(25000);
server.sin_addr.s_addr =htonl(INADDR_ANY);
if( (res = connect(ds_sock,(struct sockaddr*) &server,sizeof(server)) ) == SOCKET_ERROR){
printf("Errore connect al server\n");
getchar();
exit(1);
}
...
Vi ringrazio per l'attenzione!