Client/serveur en C
SpinN3r
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
voila j'ai programmer un petit serveur en C auquel on peut se connecter notement avec Telnet. En fait je l'ai d'abord compiler avec C++ Builder et le .exe était généré. Seulement je me suis rendu compte que sur un autre ordinateur le programme ne démarrait pas car il manquait une DLL. J'ai ensuite essayer de le compiler avec Visual C++ et ::Code Block mais les deux ne reconnaissent pas les fonctions de winsock à savoir socket() etc. Je ne comprends pas car les 2 compilateurs possèdent bien le fichier winsock.h... Je ne pense pas non plus que l'erreur vienne de mon code source puisque il se compilait avec C++ Builder... Je vous donne mon code source au cas où:
#include <winsock.h>
#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
SOCKET s1,s2;
WSADATA WSAdata;
struct sockaddr_in in1,in2;
void connect1(void)
{
int lenght;
WSAStartup(0x0202,&WSAdata);
s1=socket(PF_INET,SOCK_STREAM,0);
in1.sin_family=PF_INET;
in1.sin_port=htons(2003);
in1.sin_addr.s_addr=INADDR_ANY;
bind(s1,(struct sockaddr*)&in1,sizeof(struct sockaddr_in));
lenght=sizeof(struct sockaddr);
listen(s1,1);
printf("\nEN ATTENTE...");
s2=accept(s1,(struct sockaddr*)&in2,(LPINT)&lenght);
printf("OK\n");
}
char* recevoir(char* buff,int lenght)
{
int i;
for(i=0;i<lenght;i++)
{
recv(s2,buff+i,1,0);
send(s2,buff+i,1,0);
}
return buff;
}
int main(void)
{
char buffer[100];
while(1)
{
connect1();
strcpy(buffer,"\rtoc toc neo...\r\nsaisir mot de passe:");
send(s2,buffer,strlen(buffer),0);
if (strncmp(recevoir(buffer, 8),"21051991",8)==0)
{
strcpy(buffer,"\r\nLOGIN OK\r\n");
send(s2,buffer,strlen(buffer),0);
}
shutdown(s1,2);
closesocket(s1);
shutdown(s2,2);
closesocket(s2);
WSACleanup();
}
}
En gros je cherche à pouvoir compiler mon programme afin qu'il soit executable sur tous les ordinateurs (du moins ceux tournant sous windows) sans qu'il y est besoin d'une dll ce qui devrait être possible... Je vous remercie d'avance!!
voila j'ai programmer un petit serveur en C auquel on peut se connecter notement avec Telnet. En fait je l'ai d'abord compiler avec C++ Builder et le .exe était généré. Seulement je me suis rendu compte que sur un autre ordinateur le programme ne démarrait pas car il manquait une DLL. J'ai ensuite essayer de le compiler avec Visual C++ et ::Code Block mais les deux ne reconnaissent pas les fonctions de winsock à savoir socket() etc. Je ne comprends pas car les 2 compilateurs possèdent bien le fichier winsock.h... Je ne pense pas non plus que l'erreur vienne de mon code source puisque il se compilait avec C++ Builder... Je vous donne mon code source au cas où:
#include <winsock.h>
#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
SOCKET s1,s2;
WSADATA WSAdata;
struct sockaddr_in in1,in2;
void connect1(void)
{
int lenght;
WSAStartup(0x0202,&WSAdata);
s1=socket(PF_INET,SOCK_STREAM,0);
in1.sin_family=PF_INET;
in1.sin_port=htons(2003);
in1.sin_addr.s_addr=INADDR_ANY;
bind(s1,(struct sockaddr*)&in1,sizeof(struct sockaddr_in));
lenght=sizeof(struct sockaddr);
listen(s1,1);
printf("\nEN ATTENTE...");
s2=accept(s1,(struct sockaddr*)&in2,(LPINT)&lenght);
printf("OK\n");
}
char* recevoir(char* buff,int lenght)
{
int i;
for(i=0;i<lenght;i++)
{
recv(s2,buff+i,1,0);
send(s2,buff+i,1,0);
}
return buff;
}
int main(void)
{
char buffer[100];
while(1)
{
connect1();
strcpy(buffer,"\rtoc toc neo...\r\nsaisir mot de passe:");
send(s2,buffer,strlen(buffer),0);
if (strncmp(recevoir(buffer, 8),"21051991",8)==0)
{
strcpy(buffer,"\r\nLOGIN OK\r\n");
send(s2,buffer,strlen(buffer),0);
}
shutdown(s1,2);
closesocket(s1);
shutdown(s2,2);
closesocket(s2);
WSACleanup();
}
}
En gros je cherche à pouvoir compiler mon programme afin qu'il soit executable sur tous les ordinateurs (du moins ceux tournant sous windows) sans qu'il y est besoin d'une dll ce qui devrait être possible... Je vous remercie d'avance!!
A voir également:
- Client/serveur en C
- Cybera client - Télécharger - Divers Réseau & Wi-Fi
- Changer serveur dns - Guide
- Filezilla client - Télécharger - Téléchargement & Transfert
- Filezilla client ou serveur ✓ - Forum Réseau
- Formate pour taxer client frigo vide ✓ - Forum Matériel & Système
3 réponses
Salut.
à quel niveau il ne reconnait pas socket ? à la compilation ou à l'édition des liens ?
Si c'est à l'édition des liens, il faut lier avec libws2_32.a.
Si c'est à la compilation, fait une recherche plein texte de socket dans l'ensemble de tes .h, pour savoir quel en-tête inclure
à quel niveau il ne reconnait pas socket ? à la compilation ou à l'édition des liens ?
Si c'est à l'édition des liens, il faut lier avec libws2_32.a.
Si c'est à la compilation, fait une recherche plein texte de socket dans l'ensemble de tes .h, pour savoir quel en-tête inclure
D'abord merci d'avoir répondu, ensuite je suppose que le problème se situe au niveau du linkage puisque quand je compilais sous C++ builder j'incluais winsock.h et ca fonctionnait très bien. Je vais regarder au niveau de ce que tu m'as dis sur le linkage merci.
C'est le problème des IDE, c'est que comme elles font des trucs en automatique, si tu en change, ça ne fonctionne plus.
Il est fort probable que ton builder liait automatiquement avec la bibliothèque de socket. Maintenant, en tout cas avec Code::Block, il faut lui préciser.
Bonne chance; et n 'oublie pas de mettre la solution du problème et en résolue lorsque tu auras trouvé.
Il est fort probable que ton builder liait automatiquement avec la bibliothèque de socket. Maintenant, en tout cas avec Code::Block, il faut lui préciser.
Bonne chance; et n 'oublie pas de mettre la solution du problème et en résolue lorsque tu auras trouvé.
Non, pas avec VC++ .
Un #pragma et c'est réglé.
(NB : ne fonctionne pas avec gcc)