Zum Inhalt springen

Windows Sockets


Empfohlene Beiträge

Hi,

ich hab einen Server und einen Client mit Windows Sockets geschreiben.

Leider bekomme ich beim Ausführen des Servers von der Funktion accept

jedesmal den Fehler Bad Address und beim Client von der Funktion connect

den Fehler Connection refused, da das meine ersten Programme mit Windows Sockets

sind hab ich keine Ahnung woran das liegt. Die Programme laufen beide auf verschiedenen

PCs in einem Netzwerk.

Hat irgendwer vielleicht ne Idee?

Ich hab das übrigens anhand des Artikels Setting Up Client and Server Sockets in

der MSDN Library gemacht, falls den jemand kennt.

Gruß

Guybrush

Link zu diesem Kommentar
Auf anderen Seiten teilen

hi..

zur socket Programmierrung kann ich dir wärmstens ein kostenloses Buch empfehlen...

Das ist von der Firma Wiesemann & Theis heisst "TCP/IP Ethernet und Web-IO"...

kostet wie gesagt nichts, kann man im Internet anfordern und ist echt super verständlich geschrieben.. kann ich nur jedem empfehlen...

Die gehen da auch auf Socketprogrammierung ein (mit vollständigen beispielprogrammen etc...)

einfach auf http://www.wut.de gehen, im Menü auf aktuell klicken und da findet man das Buch.. ganz runterscrollen, Formular ausfüllen abschicken, fertig...

und wer Angst hat, das das nur Werbung sei, den kann ich beruhigen.. keine Werbung keine weiteren Mails...

have fun, Taz...

Link zu diesem Kommentar
Auf anderen Seiten teilen

leider konnte ich den artikel auch nicht in der msdn finden. was wird dort verwendet - sdk oder mfc?

poste mal ein bisserl code vom server...

versuch mal server und client auf einem rechner laufen zu lassen. wenn das klappt liegt es wahrscheinlich am netz und nicht an deinem programm.

das buch von "wut" habe ich mir auch zugelegt. dort sind jedoch nur beispiele in vb und pascal (oder delphi ?) enthalten. aber für das theoretische verständnis ist es nicht schlecht (was aber für die c/c++ programmierung auch nicht wirklich weiter hilft ;))

gruß

vinc

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok, hier habt ihr den Code:


#ifndef _WINSOCKAPI_
#define _WINSOCKAPI_
#endif
#include <windows.h>
#include <winsock2.h>
#include <stdio.h>
#include <conio.h>

SOCKET SvrSocket,ClientSocket;
sockaddr_in SvrAddr,CliAddr;
DWORD Version;
WSADATA WsaData;
int addr_len;
char *Text;


main()
{
Version = MAKEWORD(2,2);
if (WSAStartup(Version, &WsaData) != 0)
{
printf("\nWindows-Socket initialisierung fehlgeschlagen!");
return 0;
}
if (LOBYTE(WsaData.wVersion) != 2 ||
HIBYTE(WsaData.wVersion != 2))
{
printf ("\nFalsche Windows-Socket Version!");
return 0;
}

SvrSocket = socket(AF_INET,SOCK_STREAM,0);
if (SvrSocket == INVALID_SOCKET)
{
printf ("\nServer-Socket: INVALID_SOCKET -> %i",WSAGetLastError());
return 0;
}

SvrAddr.sin_family = AF_INET;
SvrAddr.sin_addr.s_addr = INADDR_ANY;
SvrAddr.sin_port = htons(5001);
if (bind(SvrSocket,(LPSOCKADDR)&SvrAddr,sizeof(sockaddr_in)) == SOCKET_ERROR)
{
printf ("bind: SOCKET_ERROR -> %i",WSAGetLastError());
return 0;
}
if (listen(SvrSocket,1) == SOCKET_ERROR)
{
printf ("\nlisten: SOCKET_ERROR -> %i",WSAGetLastError());
return 0;
}

for ( ; ; )
{

if (kbhit())
{
if (getch() == 27)
break;
}
ClientSocket = accept(SvrSocket,(LPSOCKADDR)&CliAddr,&addr_len);
if (ClientSocket == INVALID_SOCKET)
{
printf ("\nClient-Socket: INVALID_SOCKET -> %i",WSAGetLastError());
}
else
{
if (recv(ClientSocket,Text,100,MSG_PEEK) == SOCKET_ERROR)
{
printf ("\nSOCKET_ERROR: %i",WSAGetLastError());
getch();
}
else
{
printf ("\nÜbertragung erfolgreich:\n\n%s",Text);
getch();
}
}
closesocket(ClientSocket);
}
WSACleanup();
return 0;
}
[/PHP]

Könnte es vielleicht am Port liegen?

Ich hab nämlich keine Ahnung was ich da Angeben muß und hab einfach mal den aus dem

Beispiel übernommen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ahh, danke klotzkopp, der Server scheint jetzt zu klappen, allerdings bekomme

ich beim Client immer noch Connection Refused. Allso dass die Verbindung

abgelehnt wurde.

Hier ist einfach mal ein außschnitt aus dem Client:


srv_info=getservbyname("ftp","tcp");
if (srv_info == 0)
{
printf ("Server Error -> %i",WSAGetLastError());
return 0;
}

sadr.sin_family = AF_INET;
sadr.sin_addr.s_addr = inet_addr(SERVER); //Server ist die IP-Adresse des Servers
sadr.sin_port=srv_info->s_port;

while (connect(CliSocket,(LPSOCKADDR)&sadr,sizeof(sadr)) == SOCKET_ERROR)
{
printf ("\nconnect: SOCKET_ERROR -> %i",WSAGetLastError());
}
printf ("Verbunden!");
if (send(CliSocket,"Hallo",5,MSG_DONTROUTE) == SOCKET_ERROR)
{
printf ("\nsend: SOCKET_ERROR -> %i",WSAGetLastError());
return 0;
}
printf ("\nSenden erfolgreich!");
getch();
[/PHP]

Gruß

Guybrush

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das mit dem FTP kahm mir eh schon so komisch vor:) steht aber genau so in dem

MSDN Artikel.

Ich habs jetzt mit der Funktion getservbyport probiert, dass klappt aber auch

nicht so richtig.

Ich probier erst mal ein bischen selber und meld mich dann wieder.

Danke für die Hilfe!

Gruß

Guybrush

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

ich hab noch ein bischen an meinem Client rumgebastelt, krieg ihn aber einfach nicht zum

laufen. Wie gesagt versuche ich es jetzt mit der Funktion getservbyport bekomme hier aber

immer die Fehlermeldung "WSANO_DATA" welche in der MSDN folgendermaßen erklärt ist:

"Valid name, no data record of requested type.".

Leider kann ich damit überhauptnichts anfangen. Außerdem ändert sich im Verhalten meines

Clients nichts wenn der Server nicht läuft, also glaube ich das die gar nicht miteinander

kommunizieren.

Gruß

Guybrush

Link zu diesem Kommentar
Auf anderen Seiten teilen

getservbyport liefert nur dann Daten, wenn es sich um einen "well-known" (bekannten) Port handelt. Wenn Du das mit 5001 versuchst, dann kann dabei nichts herauskommen, weil damit kein bekannter Dienst verknüpft ist.

Du kannst den Port aber beim Client genau wie beim Server einfach setzen:

sadr.sin_port = htons( 5001 );

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...