[Erledigt]Netzwerkkomunikation Problem geschlossen 

Status
Für weitere Antworten geschlossen.

obi--wan

Registered +
Registriert
Apr. 2008
Beiträge
180
Allso ich bin grad dabei ein Programm in C zu schreiben das übers Netztwerk komuniziert. Ich hab beim Server das Problem das ich bei bind() den Fehlercode 10038 zurückbekomme. Hab auch schon gesucht und bei msdn folgendes gefunden:

WSAENOTSOCK
10038

Socket operation on nonsocket.

An operation was attempted on something that is not a socket. Either the socket handle parameter did not reference a valid socket, or for select, a member of an fd_set was not valid.

Das hilft mir in der Fehlerbeseitigung jedoch nicht weiter. Und auch Google hat nichts gefunden.

Der Source:

Code:
#include 
#include 
#include 
#include 
#include "mywinsock.h"

int main()
{

SOCKET acceptsocket, sock;
SOCKADDR_IN addr;
long rc = 0;

puts("Warte auf Verbindung");
rc = startWinsock();
if(rc != 0) {
printf("Fehler: startwinsock, fehler code: %d\n",rc);
}
acceptsocket = createSocket;
if(rc == SOCKET_ERROR) {
puts("fehler beim createn");
}
rc = bindSocket(sock, addr, 12345);
if(rc == SOCKET_ERROR) {
printf("Fehler: bind, fehler code: %d\n",WSAGetLastError());
}
rc = listen(acceptsocket, 10);
if(rc == SOCKET_ERROR) {
puts("Fehler beim listen");
}
sock = accept(acceptsocket, NULL, NULL);
if(rc == INVALID_SOCKET) {
puts("Verbindung fehlgeschlagen");
}
else {
puts("Verbindung hergestellt");
}
closesocket(acceptsocket);
closesocket(sock);
WSACleanup();
system("pause");

return 0;
}

Das Headerfile "mywinsock.h":

Code:
#ifndef winsock_h
#define winsock_h



int bindSocket(SOCKET sock, SOCKADDR_IN address, int port);
SOCKET createSocket(void);
int connectSocket(SOCKET sock, SOCKADDR_IN address, char ip[], int port);
int startWinsock(void);



int bindSocket(SOCKET sock, SOCKADDR_IN address, int port) {

memset(&address,0,sizeof(SOCKADDR_IN));

address.sin_family=AF_INET;
address.sin_port=htons(port);
address.sin_addr.s_addr=ADDR_ANY;

return bind(sock,(SOCKADDR*)&address,sizeof(SOCKADDR_IN));

}



SOCKET createSocket(void) {

return socket(AF_INET,SOCK_STREAM,0);

}


int startWinsock(void) {
WSADATA wsa;
return WSAStartup(MAKEWORD(2,0),&wsa);
}


int connectSocket(SOCKET sock, SOCKADDR_IN address, char ip[], int port) {

memset(&address,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten 

address.sin_family=AF_INET;
address.sin_port=htons(port); // wir verwenden mal port 12345
address.sin_addr.s_addr=inet_addr(ip); // zielrechner ist unser eigener

return connect(sock,(SOCKADDR*)&address,sizeof(SOCKADDR));

}

#endif

Compiler is GCC 3.4 mit Code:Blocks als IDE.

edit:

Hat sich erledgt. Äuserst peinlicher Feher!

Hab hier:
Code:
acceptsocket = createSocket;
die Klammern Vergessen.

Und Hier:
Code:
bindSocket(sock, addr, 12345);
hätte der acceptsocket hergehört und nicht der connectionsocket.

mfg
obi--wan
 
Zuletzt bearbeitet von einem Moderator:
Status
Für weitere Antworten geschlossen.
Zurück
Oben Unten