Windows Socket de Programmation en C
Je suis prise d'un réseau de classe où le Professeur est littéralement en train de lire le livre à la classe. Inutile de dire que je n'ai aucune Idée de ce que je suis en train de faire. Notre semestre projet est de copier le code de notre livre de texte et de faire un client-serveur réseau. Littéralement recopiant le code de teh livre sans modifications.
Le livre a eu des erreurs dans le code (il manque un point-virgule, extra paranthesis) mais j'ai réussi à au moins compiler le code. Cependant, je rencontre un tas d'erreurs de liaison.
Exemple:
Erreur 1 erreur LNK2019: symbole externe non résolu impsendto@24 référencé dans la fonction _main C:\Users\Documents\Visual Studio 2010\Projects\Client_Server\Client_Server\Client_Server\Server.obj Client_Server
j'ai regardé le code d'erreur et je pense que le code est en essayant de lier à des définitions qui ne sont pas inexistants dans les fichiers d'en-tête. J'ai une dure de temps à corriger les erreurs LNK vs les erreurs de Syntaxe. Mais comme je l'ai dit je n'ai aucune idée de la façon d'aller sur la fixation de ce. Je vous envoie le code pour le côté serveur, j'ai couru dans les mêmes erreurs sur le côté client.
include <stdio.h>
include <string.h>
include <WinSock2.h>
include <WinSock.h>
include <stdint.h>
include <time.h>
int main(void) {
int s;
int len;
char buffer[256];
struct sockaddr_in servAddr;
struct sockaddr_in clntAddr;
int clntAddrLen; //length of client socket addre
//Build local (server) socket add
memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_port = htons(21);
servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
//create socket
if((s=socket(PF_INET, SOCK_DGRAM, 0) <0 ))
{
perror("Error: Socket Failed!");
exit(1);
}
//bind socket to local address and port
if((bind(s,(struct sockaddr*)&servAddr, sizeof(servAddr))<0))
{
perror("Error:bind failed!");
exit(1);
}
for(;;)
{
len = recvfrom(s,buffer, sizeof(buffer),0,(struct sockaddr*)&clntAddr, &clntAddrLen);
//send string
sendto(s, buffer, len, 0, (struct sockaddr*)&clntAddr, sizeof(clntAddr));
}
}
Des conseils, des liens vers des informations utiles ou des conseils seraient appréciés. J'ai essayé de lire le livre de texte, mais je suis complètement perdu. Aussi, c'est le seul code concernant la cession nous avons fait tout le semestre. Tout le reste a été la collecte de paquets à l'aide d'un renifleur de paquets. Littéralement entré dans la classe et dit copier et exécuter du code sur la page X.
OriginalL'auteur networkingNoob | 2011-07-21
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de lier la bibliothèque Ws2_32.lib utilisation de winsock. Vous devez également appeler WSAStartup avant d'utiliser tout autre winsock fonctions (ce n'est pas la cause de votre erreur, mais vous aurez des problèmes une fois que vous résoudre le manque de la bibliothèque de l'émission).
J'ai ajouté le fichier de la bibliothèque et je peux construire en debug mais ce n'est pas la création de l'exécutable. Lorsque j'essaie de débogage en mode release, je tombe sur la même erreur de lien.
OriginalL'auteur bdonlan
Au premier abord, je vais essayer de l'aider à l'aide de votre dernier commentaire: supposons que vous utilisez Visual Studio (je pense que c'est la meilleure option pour commencer à winsock pour la programmation de windows que Microsoft se soucie de base de Windows, les bibliothèques sont à jour et qu'ils sont compatibles avec utile msdn à l'appui).
Si vous obtenez une erreur comme celle-ci:
1>asdf.obj : error LNK2001: symbole externe non résolu _imp_WSAStartup@8
cela signifie que ws2_32.lib n'est pas liée correctement. Faire un clic droit sur votre projet dans l'explorateur de solutions, aller à l'éditeur de liens -> input et ajouter ws2_32.lib à d'autres dépendances. Cette bibliothèque fait partie du SDK de windows (je suppose que c'est installé avec la plupart des versions de Visual Studio), donc assurez-vous que le fichier existe sur votre ordinateur.
Et maintenant, comment faire correctement projet dans un style moderne sans suite des anciennes tutoriels:
La bibliothèque, vous devez ajouter est Winsock2.h. Winsock.h est vieux (obsolète) version et il n'est pas nécessaire de l'utiliser dans de nouvelles applications. Pour commencer à utiliser les sockets, vous devez appeler la fonction WSAStartup, pour ce faire, vous devez initialiser struct WSADATA au début.
La feuille de code ressemble à ceci:
Pour plus d'aide, vous pouvez visiter ici
Une remarque: puisque la question est vieux et je ne suis pas sûr de son auteur de ne jamais trouver ma réponse utile, je veux aider les autres utilisateurs de regarder cette question
OriginalL'auteur