Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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...

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

  • Autor

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.

  • Autor

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

  • Autor

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

  • Autor

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

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 );

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.