2016-05-03 6 views
-1

Ich bin neu in Socket-Programmierung. Ich habe eine grundlegende Funktion geschrieben, die einen UDP-Socket erstellt und ein Array durch es sendet. Meine Funktion erstellt einen Socket und gibt 0 in decriptor zurück, und wenn ich sendto() verwende, gibt es 10038 error.Ich versuche, Udp-Socket zu erstellen und eine Zeichenfolge durch es zu senden. aber es gibt 10038 Fehler bei sendto()

Hier ist mein Code:

int ret, a=0; 
WSADATA wsa; 

if (WSAStartup(MAKEWORD(2,2),&wsa) != 0) 
{ 
    exit(EXIT_FAILURE); 
} 

if (m_socket == INVALID_SOCKET) 
{ 
    m_socket = (AF_INET, SOCK_DGRAM,0); 
} 

SOCKADDR_IN addr; 
char buf[256]; 
addr.sin_family=AF_INET; 
addr.sin_port=htons(1234); 
addr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); 

strcpy(buf,"Hallo world!"); 
if (m_socket != INVALID_SOCKET) 
{ 
ret=sendto(m_socket,buf,strlen(buf),0,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)); 

if(ret==SOCKET_ERROR) 
{ 
    printf("Fehler: sendto, fehler code: %d\n",WSAGetLastError()); 
    a=WSAGetLastError(); 
    ret=-1; 
} 
CloseSocket(); 
WSACleanup(); 
m_socket = INVALID_SOCKET; 
} 
+1

Fehlercode bedeutet "Socket Operation on nonsocket.". Link zu Doku: https://msdn.microsoft.com/en-us/library/windows/desktop/ms740668%28v=vs.85%29.aspx#WSAENOTSOCK – Schore

+0

Ich vermisse den Socket-Aufruf zu initialisieren 'm_socket' . – rpy

+0

Sie haben den eigentlichen Aufruf von socket weggelassen: 'm_socket = socket (AF_INET, SOCK_DGRAM, 0);'. Die angegebene Syntax kompiliert, da() 's in C/C++ eine Liste von Ausdrücken einschließen kann, die ausgewertet werden, und der ganze Ausdruck hat den Wert des letzten Eintrags, dh (m_socket = (AF_INET, SOCK_DGRAM, 0) weist einfach 0 zu m_socket –

Antwort

1

Ihr Code hat:

m_socket = (AF_INET, SOCK_DGRAM,0); 

für m_socket initialisiert. Dies wird 0 zu m_socket nicht zuweisen einen Socket aus dem Betriebssystem zuweisen. Daher erhalten Sie diesen Nicht-Socket-Fehler.

Sie könnten verwenden:

m_socket = socket(AF_INET, SOCK_DGRAM,0); 

die Tippfehler zu verschleiern.

+0

lol, daher "Socket-Betrieb auf Nicht-Socket" :) –

+0

C wäre besser ohne den Komma-Operator gewesen. –

+0

Ja. Ich vergesse Steckdose darin. Ich habe seit gestern versucht und mich gefragt, warum dieses einfache Programm nicht funktioniert. – I004

Verwandte Themen