Ich hab mal zu test zwecken nen client geschrieben der jetzt auf den dazugehörigen server connecten soll. Über das locale netzwerk funtioniert das auch soweit. wenn ich jetzt allerdings übers i net connecten will klappts nich. liegts an meinem router oder vlt doch am quellcode. komm selber nich drauf was falsch is.
hier der client
und hier der server
hier der client
Code:
#include <iostream>
#include <windows.h>
#include <winsock2.h>
using namespace std;
int startWinsock(void)
{
WSADATA wsa;
return WSAStartup(MAKEWORD(2, 0), &wsa);
}
int main()
{
long rc;
SOCKET s;
SOCKET acceptSocket;
SOCKET connectedSocket;
SOCKADDR_IN addr;
rc = startWinsock();
if(rc != 0)
{
cout<<"winsock konnte nich gestartet werden"<<endl;
return 1;
}
else;
acceptSocket = socket(AF_INET, SOCK_STREAM, 0);
if(acceptSocket == INVALID_SOCKET)
{
cout<<"Socket konnt enicht erstellt werden"<<endl;
return 1;
}
else;
memset(&addr,0,sizeof(SOCKADDR_IN));
addr.sin_family=AF_INET;
addr.sin_port=htons(80);
addr.sin_addr.s_addr=ADDR_ANY;
rc=bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN));
if(rc==SOCKET_ERROR)
{
cout<<"error"<<endl;
return 1;
}
else
cout<<"..."<<endl;
rc=listen(acceptSocket,10);
if(rc==SOCKET_ERROR)
{
cout<<"error"<<endl;
return 1;
}
else
cout<<"listen"<<endl;
connectedSocket=accept(acceptSocket,NULL,NULL);
if(connectedSocket==INVALID_SOCKET)
{
printf("Fehler: accept, fehler code: %d\n",WSAGetLastError());
cin.get();
return 1;
}
else
{
printf("Neue Verbindung wurde akzeptiert!\n");
cin.get();
}
cin.get();
}
und hier der server
Code:
#include <iostream>
#include <windows.h>
#include <winsock2.h>
using namespace std;
int startWinsock(void)
{
WSADATA wsa;
return WSAStartup(MAKEWORD(2, 0), &wsa);
}
//char hostnameOrIp[256] = "boonserver.dyndns.org";
long getAddrFromString(char* hostnameOrIp, SOCKADDR_IN* addr);
int main(int argc, char** argv)
{
char buf[256];
long rc;
SOCKET s;
SOCKADDR_IN addr;
rc = startWinsock();
if(rc != 0)
{
cout<<"winsock konnte nich gestartet werden"<<endl;
cin.get();
return 1;
}
else;
s = socket(AF_INET, SOCK_STREAM, 0);
if(s == INVALID_SOCKET)
{
cout<<"Socket konnt enicht erstellt werden"<<endl;
cin.get();
return 1;
}
else
cout<<"Socket erstellt"<<endl;
memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten
addr.sin_family=AF_INET;
addr.sin_port=htons(80); // wir verwenden mal port 12345
rc=getAddrFromString(argv[1],&addr);
if(rc == SOCKET_ERROR)
{
cout<<"hostname konnte nicht aufgelöst werden"<<endl;
cin.get();
return 1;
}
else
cout<<"hostname aufgelöst"<<endl;
rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));
if(rc==SOCKET_ERROR)
{
printf("Fehler: connect gescheitert, fehler code: %d\n",WSAGetLastError());
cin.get();
return 1;
}
else
cout<<"Verbunden ...."<<endl;
cout<<"send:";
cin>>buf;
rc=send(s,buf,256,0);
cin.get();
}
long getAddrFromString(char* hostnameOrIp, SOCKADDR_IN* addr)
{
hostnameOrIp = "hostname";
long rc;
unsigned long ip;
HOSTENT* he;
/* Parameter prüfen */
if(hostnameOrIp==NULL || addr==NULL)
{
cout<<"socket error "<<endl;
return SOCKET_ERROR;
}
/* eine IP in hostnameOrIp ? */
ip=inet_addr(hostnameOrIp);
/* bei einem fehler liefert inet_addr den Rückgabewert INADDR_NONE */
if(ip!=INADDR_NONE)
{
addr->sin_addr.s_addr=ip;
return 0;
}
else
{
/* Hostname in hostnameOrIp auflösen */
he=gethostbyname(hostnameOrIp);
if(he==NULL)
{
return SOCKET_ERROR;
}
else
{
/*die 4 Bytes der IP von he nach addr kopieren */
memcpy(&(addr->sin_addr),he->h_addr_list[0],4);
}
return 0;
}
}