socket_Beispiel
-
hallo,
ich wollte mal die socket_programmierung lernen dann habe ich den Code des folgenden Links in MS-VC++ 6,(WinXP) erstmals probiert
http://www.zotteljedi.de/doc/socket-tipps/index.html#include <stdio.h> #include <string.h> #include <windows.h> #include <winsock.h> #define BUF_SIZ 4096 void cut(char *s) { while (*s && (*s != '\r') && (*s != '\n')) s++; *s = '\0'; } DWORD WINAPI reader(PVOID pParam) { char line[BUF_SIZ]; int s; s = *(int*)pParam; while(fgets(line, sizeof(line) - 3, stdin)) { cut(line); strcat(line, "\r\n"); /* passt sicher */ if (send(s, line, strlen(line), 0) == -1) return 1; } return 0; } DWORD WINAPI writer(PVOID pParam) { char buffer[BUF_SIZ]; int bytes, s; s = *(int*)pParam; while((bytes = recv(s, buffer, sizeof(buffer), 0)) > 0) fwrite(buffer, 1, bytes, stdout); return 0; } int main(int argc, char *argv[]) { HANDLE threads[2]; unsigned long id; struct sockaddr_in addr; struct hostent *host; int s; WSADATA wsa; if (argc != 3) { fprintf(stderr, "usage: %s <Host> <Port>\n", argv[0]); return 1; } if (WSAStartup(MAKEWORD(1, 1), &wsa)) { fprintf(stderr, "WSAStartup() failed: %lu\n", WSAGetLastError()); return 2; } if ((addr.sin_addr.s_addr = inet_addr(argv[1])) == -1) { host = gethostbyname(argv[1]); if (!host) { fprintf(stderr, "gethostbyname() failed: %lu\n", WSAGetLastError()); return 3; } addr.sin_addr = *(struct in_addr*)host->h_addr; } if ((s = socket(PF_INET, SOCK_STREAM, 0)) == -1) { fprintf(stderr, "socket() failed: %lu\n", WSAGetLastError()); return 4; } addr.sin_family = AF_INET; addr.sin_port = htons(atol(argv[2])); printf("connecting to %s\n", inet_ntoa(addr.sin_addr)); if (connect(s, (struct sockaddr*)&addr, sizeof(addr)) == -1) { fprintf(stderr, "connect() failed: %lu", WSAGetLastError()); return 5; } threads[0] = CreateThread(NULL, 0, reader, &s, 0, &id); threads[1] = CreateThread(NULL, 0, writer, &s, 0, &id); WaitForMultipleObjects(2, threads, FALSE, INFINITE); closesocket(s); return 0; }
kommen bei mir leider folgende Bugs beim Ausführen:
Linker-Vorgang läuft... tes.obj : error LNK2001: Nichtaufgeloestes externes Symbol _send@16 tes.obj : error LNK2001: Nichtaufgeloestes externes Symbol _recv@16 tes.obj : error LNK2001: Nichtaufgeloestes externes Symbol _closesocket@4 tes.obj : error LNK2001: Nichtaufgeloestes externes Symbol _connect@12 tes.obj : error LNK2001: Nichtaufgeloestes externes Symbol _inet_ntoa@4 tes.obj : error LNK2001: Nichtaufgeloestes externes Symbol _htons@4 tes.obj : error LNK2001: Nichtaufgeloestes externes Symbol _socket@12 tes.obj : error LNK2001: Nichtaufgeloestes externes Symbol _gethostbyname@4 tes.obj : error LNK2001: Nichtaufgeloestes externes Symbol _inet_addr@4 tes.obj : error LNK2001: Nichtaufgeloestes externes Symbol _WSAGetLastError@0 tes.obj : error LNK2001: Nichtaufgeloestes externes Symbol _WSAStartup@8 Debug/tes.exe : fatal error LNK1120: 11 unaufgeloeste externe Verweise Fehler beim Ausführen von link.exe.
kann mir jemand helfen?
vielen Dank
-
Du musst die ws2_32.lib einbinden.
-
vielen dank @ freaked,
ich bin kein Profi. könntest du mir bitte sagen wo ich diese Lib finde und wie kann ich die einbinden.
besten Dank
-
Welchen Compiler verwendest du?
-
HumeSikkins schrieb:
Welchen Compiler verwendest du?
_stef schrieb:
MS-VC++ 6
-
Danke für die Antwort,
ich verwende MS visual C++ 6 Autoren edition ,BS:Windows XP
-
Ich habe keine Ahnung, wie das bei MS Visual C++ 6 ist. Aber das einfachste wäre wohl, wenn du einfach mal in deinem MS Visual-Ordner nach der Datei suchst, sie wird wahrscheinlich nur einmal vorhanden sein und dann kannste sie gleich einbinden.
-
#pragma comment (lib, "ws2_32.lib")
Oder in den Projekteinstellungen.
-
Hallo,
wenn Du im "MS VC++ 6" Editor bist, dann hast Du ja im linken Teil Deinen
"Arbeitsbereich", klicke hier mit der rechten Maus auf Dein "Projekt" und wähle
im erscheinenden Menü "Einstellungen" an, hier wählst Du nun die Karte "Linker"
und dort kannst Du unter "Objekt-/Bibliothek-Module" jeweils für "Win32 Debug"
und "Win32 Release" die "ws2_32.lib" einfügen, dann kommen beim Verlassen noch
Abfragen und die Library ist eingebunden.
MfG
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum MFC (Visual C++) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Postest doch hier bitte nicht immer das pragma.
Es ist ärgerlich wenn man in der Versionsverwaltung
son zeug ändern muss nur weil es nicht sauber im projekt
eingetragen ist.MFK schrieb:
#pragma comment (lib, "ws2_32.lib")
Oder in den Projekteinstellungen.
-
Ich finde "#pragma comment(lib, ...)" super!
-
nemeses schrieb:
Es ist ärgerlich wenn man in der Versionsverwaltung
son zeug ändern muss nur weil es nicht sauber im projekt
eingetragen ist.Was ist denn an der pragma-Lösung weniger sauber?
-
hat wer nen Link zu nem guten Socket-Tut??
Der link hier is ja schonmal nicht schlecht, aber so ne Einführung fehlt mir irgendwie. Ist mehr ne Tipps und Tricks Sammlung^^
-
Jochen Kalmbach schrieb:
Ich finde "#pragma comment(lib, ...)" super!
Full Ack!