Witam,
znowu mam problem z tym nieszczęsnym winsockiem. Dzisiaj cały dzień budowałem prototypy serwera i klienta. Takie najbardziej barebone jak się da, Client ma się łączyć z serwerem o podanym IP na podanym porcie a Serwer ma tylko napisać w konsoli że ktoś się połączył. Wysyłanie danych na razie sobie odpuściłem zupełnie. W każdym razie to jest mój prototyp i jak zapewne już się domyślacie, nie działa! :D
SERWER
//SimpleServer.cpp
#include <winsock2.h>
#include <iostream>
#include <stdio.h>
#include <cstdlib>
#define BACKLOG 10
using namespace std;
int main()
{
WSADATA wsaData;
if(WSAStartup(MAKEWORD(1,1),&wsaData)!=0)
{
fprintf(stderr,"WSAStartup failed.\n");
system("pause");
exit(1);
}
///////////////////////////////////////////////////////////////////
int sockfd,new_fd;//deskryptory gniazd
sockaddr_in my_addr,their_addr;//struktury informacji o adresach
int sin_size = sizeof(struct sockaddr_in);
sockfd = socket(AF_INET,SOCK_STREAM,0);
if(sockfd==-1)
{
cout<<"ERROR! Failed to create socket\n";
system("pause");
exit(1);
}
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(0);
my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
memset( &(my_addr.sin_zero), '\0',8);
bind(sockfd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr));
listen(sockfd,BACKLOG);
new_fd = accept(sockfd,(struct sockaddr*) &their_addr/*ukryte rzutowanie w góre*/,& sin_size);
if(new_fd==-1)
{
cout<<"a client failed to connect."<<endl;
}
else
{
cout<<ntohl(their_addr.sin_addr.s_addr)<<" connected!"<<endl;
}
system("pause");
return 0;
}
KLIENT
//SimpleClient.cpp
#include <iostream>
#include <winsock2.h>
#include <cstdio>
#include <cstdlib>
#include <ws2tcpip.h>
#include <w32api.h>
using namespace std;
int main()
{
WSADATA wsaData;
string destination_IP;
int destination_port;
if(WSAStartup(MAKEWORD(1,1),&wsaData)!=0)
{
fprintf(stderr,"WSAStartup failed.\n");
system("pause");
exit(1);
}
int sockfd;//deskryptor gniazda
sockaddr_in dest_addr;//adres gniazda docelowego
sockfd = socket(AF_INET, SOCK_STREAM,0);
if(sockfd==-1)
{
cout<<"ERROR! Failed to create socket\n";
system("pause");
exit(1);
}
cout<<"Please specify the IP and port to connect to\n";
cout<<"IP: ";
cin>>destination_IP;
cout<<"Port: ";
cin>>destination_port;
cout<<destination_IP<<" "<<destination_port<<endl;
dest_addr.sin_family = AF_INET;
dest_addr.sin_port = htons(destination_port);
dest_addr.sin_addr.s_addr = inet_addr(destination_IP.c_str());
memset( &(dest_addr.sin_zero), '\0',8);
if(connect(sockfd,(struct sockaddr *) & dest_addr,sizeof(struct sockaddr))==-1)
{
cout<<"ERROR! Failed to connect to "<<destination_IP<<" on port "<<destination_port<<" error "<<WSAGetLastError();
system("pause");
exit(1);
}
cout<<"Connected to "<<destination_IP<<" on port "<<destination_port<<endl;
system("pause");
}
w dużej części jest bazowałem na tutku z tej strony, ale wprowadziłem pewne zmiany żeby działało na windowsie.
no więc uruchamiam klienta i serwer na moim komputerze, podaje moje IP xxx.yyy.zzz.??? oraz port 4000. Niestety, otrzymuje błąd 10061 czyli WSAECONNREFUSED ale nie wiem, dlaczego. A z pustego nawet Salomon nie naleje. :D
Proszę o pomoc, bo tkwię w martwym punkcie!