La classe diagnostics en C# (erreur)
Forum Programmation : La classe diagnostics en C# (erreur)
Bj,
J'essaye de lancer un jeux depuis un programme en C#
mais quand je démarre mon programme le jeux ne sais pas démarrer parce que :
erreur:
Win_error
Couldn't load default.cfg. Make sure Call of Duty is run from the correct folder.
voila
et mon code:
proc = new Process();
ProcessStartInfo processStarInf = new ProcessStartInfo();
processStarInf.FileName = "C:\\Program Files\\Call of Duty\\CoDSP.exe";
proc = Process.Start(processStarInf);
voila merci de votre aide!!!
bon pour ça c'est bon mais mnt j'aimerais par exemple:
trouver le ping d'un serveur avec son adresse ip !!
Comment faire??
Merci
Slt
| Citation : trouver le ping d'un serveur avec son adresse ip |
Cela ne veux pas dire grand chose, soit plus explicite
j'aimerais avoir des information comme ping,nb de joueur sur des serveurs de jeux (de call of duty) mais je sais pas comment faire !!
Merci de m'aider!!
Slt,
Jette un oeil sur
http://www.nuked-klan.org/
Ca sera du php, mais le principe en C est le meme.
Tu ouvres une socket, et suivant le jeu il faut envoyer les bonnes commandes.
Ensuite il te restera à parser la réponse du serveur.
Edit : ok c modifié
le lien ne marche pas!!!
oui je sais faire des socket mais je connais pas les requete pour avoir des information sur le serveur!!!
?????
Merci
Comme je te l'ai dis il suffit de regarder le code du module serveur d'un NK
Vous pourriez un peu m'expliquer le code???
SVP
MERci
Slt,
Je ne suis pas un grand pro du php et du NK neanmoins j'ai vite fais regardé.
Je suis parti pour trouver la commande pour Quake.
Dans le module serveur j'ai trouvé 2 fichiers interessant.
q3a.php
gsQuery.php
Dans q3a.php, il existe une classe q3a et une méthode "query_serveur'". Dans cette méthode se trouve la commande pour avoir le statut du serveur qui est :
"\xFF\xFF\xFF\xFF\x02getstatus\x0a\x00";
Ensuite cette commande est envoyé au serveur de jeu par le bias de _sendCommand qui se trouve ds le ficher gsQuery.php qui lui utilise "fsockopen" qui permet d'ouvrir une socket et d'envoyer une commande.
Reste à trouver la commande à envoyer à un serveur de jeu Call of Duty, car je ne l'ai pas trouvé.
++
Merci,
mais voila j'ai trouver un fichier en VB qui pour trouver les information(vers un server COD) envoyait "ÿÿÿÿgetstatus", donc j'ai essayer j'ai fait une socket j'ai mis l'ip et le port d'un serveur puis comment reponse je recois "^^^^disconnect", et c'est tout le temps comme ca même si j'envoi "status" c'est la même chose(le fichier est ici )
Donc ????
Merci a toi!!
et je sais que le protocole est "UDP" voici mon code pour l'instant :
using System;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;
class h
{
public static void Main()
{
string resultat;
char[] buffer = new char[1024];
UdpClient client = null;
int clientport = 22890;
int serveurport = 22890;
client = new UdpClient(clientport);
string serveurhost = "80.231.0.10";
string req = "ÿÿÿÿgetstatus";
byte[] rq = System.Text.Encoding.ASCII.GetBytes( req.ToCharArray() );
client.Send(rq, rq.Length, serveurhost, serveurport);
IPEndPoint ip = null;
//reception
byte[] r = client.Receive(ref ip);
//conversion
resultat = System.Text.Encoding.ASCII.GetString(r);
if(resultat=="ÿÿÿÿstatusResponse" )
{
Console.WriteLine("Bravo" );
Console.WriteLine("{0}",resultat);
}
else
{
Console.WriteLine("Le serveur est Ofline" );
Console.WriteLine("{0}",resultat);
}
//en VB :
//Winsock2.RemoteHost = ip; // Spécifie au Winsock l'adresse du serveur
// Winsock2.RemotePort = port; // Spécifie au Winsock le port du serveur
//Winsock2.SendData ("ÿÿÿÿgetstatus" ); // Envoi de la requête avec la commande ""ÿÿÿÿgetstatus" qui permet d'avoir les infos des serveurs COD
}
}
donc normalement si le serveur est connecter il doit renvoyer ÿÿÿÿgetstatusResponse mais c'est toujour la même chose "^^^^deconnect"
Merci
Re,
je n'ai pas installé VB, en tt cas, la méthode est la bonne, connexion + envoi de la commande.
Vérifie bien que la commande envoyé est la bonne, car un seul caractère manquant/incorrect peut causer des problemes.
tente de mettre directement ce que j'ai écrit plus haut avec les caracteres hexa.
++
j'ai déja essayer j'ai mis ta commande même reponse "^^^^disconnect" sinon la commande???
MERCI
Je viens de regarder le code du vb est en effet les commandes ont l'air bonnes et les connexions aussi.
De plus les commentaires prouvent que cela fonctionne.
Donc cela viens d'un chez toi et de ton code.
Je ne connais pas le C# mais peut etre que tu as un blem avec la socket ? en tt cas je n'ai pas plus d'explication a te donner, dsl
Bon courage.
bon ok mais tu connais pas des cours sur les sockets alors ???
Merci
Si mais seulement en win32 et en anglais (assez imbuvable mais tres complet, faut prendre le tps
)
Voici :
Network
Network-Exemple
Et sinon un ti pdf en francais:
Socket.pdf
++
Mais c'est winsock, j'arrive pas a utiliser winsock dans SharpDevelop!!!
???
Merci
En faite je pense que c'est la commande qui n'est pas bonne parce que quoi que je met j'ai la même reponse "^^^^disconnect"!!
Donc...
MErci
non voila j'ai trouvé un autre script php code pour la commande est ici :
fwrite($s_con, "ÿÿÿÿ". chr (0x02). "getstatus". chr (0x00));
Est-ce que quelqu'un peut me mettre ca en C#??
Merci
bon j'ai trouvé mon erreur :
byte[] rqq = Encoding.ASCII.GetBytes("ÿÿÿÿgetstatus".ToString());
Console.WriteLine("{0}",Encoding.ASCII.GetString(rqq,0,13));
en reponse je recoit ????getstatus a la place de ÿÿÿÿgetstatus !!!
Donc comment je dois faire pour que ce soit juste???
Merci
Je pense qu'il faut que tu travailles avec les caracteres hexadecimaux
A force de persevérer, tu as bien avancé ... bravo
et quand je peux faire pour que :
byt[0] = //caracter hexadecimale ÿ
c'est quoi la valeur ÿ en hexadecimale??
Merci
| Citation : "\xFF\xFF\xFF\xFF\x02getstatus\x0a\x00"; |
marche pas
le truc fonctionne mais maintenant je recois comme reponse : "?????"
MERCI
Bon j'ai bien examiné la reponse et c'est la même chose mais sauf ke c'est des autres caractère ca fait aussi disconnect!!!
Merci
voila le code que j'ai fait maintenant :
using System;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Text;
class h
{
public static void Main()
{
string resultat;
StringBuilder texte = new StringBuilder();
texte.Insert(0,"ÿÿÿÿgetstatus",1);
EndPoint ep = new IPEndPoint(IPAddress.Parse("127.0.0.1" ), 11000);
byte[] rqq = Encoding.Unicode.GetBytes("\xFF\xFF\xFF\xFFgetstatus" );
Console.WriteLine("{0}",Encoding.Unicode.GetString(rqq,0,26));
byte[] req = new byte[1000];
UdpClient client = null;
int clientport = 28960;
int serveurport = 28960;
client = new UdpClient(clientport);
string serveurhost = "210.104.200.20";
client.Send(rqq,26, serveurhost, serveurport);
IPEndPoint ip = null;
//reception
byte[] r = client.Receive(ref ip);
//conversion
resultat = System.Text.Encoding.Unicode.GetString(r);
if(resultat=="ÿÿÿÿstatusResponse" )
{
Console.WriteLine("Bravo" );
Console.WriteLine("{0}",resultat);
}
else
{
Console.WriteLine("Le serveur est Ofline" );
Console.WriteLine("{0}",resultat);
}
}
}
//
Pcq la je commence en avoir vraiment marre et si quelqu'un savait l'essayer chez soi pour voir si ils ont la même reponse!!!
MERCI ;-)
le message que je recois est : ÿÿÿÿdisconnect pourquoi pas ÿÿÿÿgetstatusResponse
????
MERCi
Re,
Bon je viens de tester vite fais en win32 et cela fonctionne.
Concernant ton code, il y a un truc qui me chiffone c ton test if(resultat=="ÿÿÿÿstatusResponse" ) car résultat ne vas contenir seulement "ÿÿÿÿstatusResponse" mais toute la chaine comprenant les stats.
Voici l'extrait du code que j'ai fait, bon c tres sommaire et tres mal fais mais c t pour tester :
SOCKET s;
s = socket(AF_INET,SOCK_DGRAM,0);
struct sockaddr_in sain;
sain.sin_family = AF_INET;
sain.sin_port = htons(atoi("28960" ));
sain.sin_addr.s_addr = inet_addr("195.149.21.88" );
connect(s, (struct sockaddr *) &sain, sizeof(sain));
char clnt[512];
char FAR buf[1024];
strcpy(clnt,"\xFF\xFF\xFF\xFF\x02getstatus\x0a\x00" );
send(s, clnt, strlen(clnt), 0);
recv(s,buf,strlen(buf),MSG_PEEK);
cout << buf << endl;
Et a la sortie voila ce que contient buf :
statusResponse
\g_gametype\sd\gamename\CoD:United Offensive\mapname\mp_railyard\protocol\21\scr_friendlyfire\1\scr_
killcam\0\shortversion\1.41\sv_allowAnonymous\0\sv_floodProtect\1\sv_hostname\^1C^3EA^1L TW REALISMO
www.cealweb.net^7sv_maxclients24sv [...] teClients2
\sv_punkbuster\0\sv_pure\1\pswrd\0\mod\1
23 106 "^1[C^3EA^1L]^7May.Koko CG"
36 105 "^2[M^3D^1C]^3*****^5Infolux"
1 112 "^1[C^3EA^1L]^7Sgto1.LiMbO ^1GCF"
28 83 "Headshot"
++
Edit :
il serait ptet judicieux de reformater le titre du topic car cela ne correpond pas trop au sujet
mon code marche ???
Mais ton code il est en C++ non??
Et comment je fais pour changer le titre??
Merci
| Citation :
|
Je sais pas, je ne connais pas le C#
| Citation : Mais ton code il est en C++ non?? |
Non c'est du C, outre le cout
| Citation : Et comment je fais pour changer le titre?? |
Aucune idée
alors pourquoi tu mets
tu as dis "j'ai essayer vite en Win32 et ca marche " sinon pour ton code j'ai pas la socket.h" donc je sais pas le compiler!!
MERCI
Et bien, j'ai fais un programme en C (et non C#) en utilisant winsock.
Je l'ai fait sous VS6, donc je ne sais pas si sous le Sharp cela fonctionnera.
Pour les include :
#include <winsock.h>
et il faudra certainement linker la lib
#pragma comment(lib, "ws2_32.lib" )
je dois mettre ca ou le "#pragma comment(lib, "ws2_32.lib" )"???
MERCI
(j'ai Dev-C++)
Généralement tu mets ca apres les "include"
bai voila j'ai fait ça sou devc++:
#include <iostream.h>
#include <stdlib.h>
#include <winsock.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib" )
main()
{
SOCKET s;
s = socket(AF_INET,SOCK_DGRAM,0);
struct sockaddr_in sain;
sain.sin_family = AF_INET;
sain.sin_port = htons(atoi("28960" ));
sain.sin_addr.s_addr = inet_addr("195.149.21.88" );
connect(s, (struct sockaddr *) &sain, sizeof(sain));
char clnt[512];
char FAR buf[1024];
strcpy(clnt,"\xFF\xFF\xFF\xFF\x02getstatus\x0a\x00" );
send(s, clnt, strlen(clnt), 0);
recv(s,buf,strlen(buf),MSG_PEEK);
cout << buf << endl;
system("PAUSE" );
return 0;
}
et il mette un truc avec linker et output!!
MERCI
Vla ce que ca donne chez moi :
#include <winsock.h>
#include <string.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib" )
void main(int argc, char *argv[]) {
printf("\nCoD Checker -- " );
char strIp[16]={"195.149.21.88"};
char strPort[6]={"28960"};
char clnt[1024];
char buf[1024];
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(2, 0);
if (WSAStartup(wVersionRequested, &wsaData))
{
printf("Erreur WSAStartup\n" );
system("PAUSE" );
exit(2);
}
SOCKET s;
s = socket(AF_INET,SOCK_DGRAM,0);
if(s==INVALID_SOCKET)
{
printf("Erreur Socket : \n" );
system("PAUSE" );
exit(2);
}
else
printf("Socket Ready : \n\n" );
struct sockaddr_in sain;
sain.sin_family = AF_INET;
sain.sin_port = htons(atoi(strPort));
sain.sin_addr.s_addr = inet_addr(strIp);
printf("Connexion to %s:%s ...",strIp,strPort);
if(connect(s, (struct sockaddr *) &sain, sizeof(sain))==SOCKET_ERROR)
{
printf("...failed\n" );
system("PAUSE" );
exit(2);
}
printf("... Succes\n\n" );
printf("Command Send ..." );
strcpy(clnt,"\xFF\xFF\xFF\xFF\x02getstatus\x0a\x00" );
if(send(s, clnt, strlen(clnt), 0)==SOCKET_ERROR)
{
printf("... Failed\n" );
system("PAUSE" );
exit(2);
}
printf("... Succes\n\n" );
printf("\nReceive :\n\n" );
recv(s,buf,strlen(buf),MSG_PEEK);
printf("%s\n",buf);
printf("\nEnd Receive.\n\n" );
if(closesocket(s)==SOCKET_ERROR)
{
system("PAUSE" ) ;
exit(2) ;
}
WSACleanup();
system("PAUSE" );
}
il me mette comme erreur :
46 c:\docume~1\h\bureau\progra~1\untitl~1.cpp
implicit declaration of function `int atoi(...)'
25 c:\docume~1\h\bureau\progra~1\untitl~1.cpp
implicit declaration of function `int system(...)'
!!!!!!!!!!
Merci
Rajoute :
#include <stdlib.h>
bon ca marche toujours pas, toujours quelque chose avec le linker, c'est pas grave !! (merci)
sinon pour mon problème quelqu'un a encore une idée???
MERCI
bon vous savez pas faire le code le plus simple en C : donc juste :
création de socket en udp
envoi au serveur la commande :...
et Recois la réponse et l'affiche a l'écran avec wsock2!!!!
MERCI
| Citation : bon vous savez pas faire le code le plus simple en C : donc juste :
|
erf ... ce que j'ai fait ne peux pas etre plus simple
Création Socket -- Connexion -- Envoi Commande -- Affichage réception socket.
Personnellement, je pense avoir fait le tour de la question
++
Mais il marche pas le code!!
J'arrive pas a le compiler!!!
Merci
Bon,
je viens d'installer DevCpp.
il faut que tu vires les #pragma et que dans les options du projet ->Parametres -> Editeurs de lien
rajouter la lib pour devcpp qui est libwsock32.a
Ensuite dans mon code, juste changer ceci:
recv(s,buf,strlen(buf),MSG_PEEK);
par
recv(s,buf,1024,MSG_PEEK);
Manant cela devrait fonctionner
voila j'ai fait project => new project (C project)
puis j'ai rajouter dans le linker : libwsock32.a
et voici mon code :
#include <winsock.h>
#include <string.h>
#include <stdio.h>
void main(int argc, char *argv[]) {
printf("\nCoD Checker -- " );
char strIp[16]={"195.149.21.88"};
char strPort[6]={"28960"};
char clnt[1024];
char buf[1024];
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(2, 0);
if (WSAStartup(wVersionRequested, &wsaData))
{
printf("Erreur WSAStartup\n" );
system("PAUSE" );
exit(2);
}
SOCKET s;
s = socket(AF_INET,SOCK_DGRAM,0);
if(s==INVALID_SOCKET)
{
printf("Erreur Socket : \n" );
system("PAUSE" );
exit(2);
}
else
printf("Socket Ready : \n\n" );
struct sockaddr_in sain;
sain.sin_family = AF_INET;
sain.sin_port = htons(atoi(strPort));
sain.sin_addr.s_addr = inet_addr(strIp);
printf("Connexion to %s:%s ...",strIp,strPort);
if(connect(s, (struct sockaddr *) &sain, sizeof(sain))==SOCKET_ERROR)
{
printf("...failed\n" );
system("PAUSE" );
exit(2);
}
printf("... Succes\n\n" );
printf("Command Send ..." );
strcpy(clnt,"\xFF\xFF\xFF\xFF\x02getstatus\x0a\x00" );
if(send(s, clnt, strlen(clnt), 0)==SOCKET_ERROR)
{
printf("... Failed\n" );
system("PAUSE" );
exit(2);
}
printf("... Succes\n\n" );
printf("\nReceive :\n\n" );
recv(s,buf,1024,MSG_PEEK);
printf("%s\n",buf);
printf("\nEnd Receive.\n\n" );
if(closesocket(s)==SOCKET_ERROR)
{
system("PAUSE" ) ;
exit(2) ;
}
WSACleanup();
system("PAUSE" );
}
et j'ai comme erreur :
21 untitled1.c
(Each undeclared identifier is reported only once
21 untitled1.c
for each function it appears in.)
22 untitled1.c
`wsaData' undeclared (first use in this function)
31 untitled1.c
parse error before `s'
32 untitled1.c
`s' undeclared (first use in this function)
44 untitled1.c
parse error before `struct'
45 untitled1.c
`sain' undeclared (first use in this function)
46 untitled1.c
`strPort' undeclared (first use in this function)
47 untitled1.c
`strIp' undeclared (first use in this function)
62 untitled1.c
`clnt' undeclared (first use in this function)
74 untitled1.c
`buf' undeclared (first use in this function)
9 untitled1.c
warning: return type of `main' is not `int'
.... et encore
pourquoi???
MErci
A vrai dire, je ne sais pas pourquoi ca deconne chez toi.
Chez moi j'ai DevCpp 4.9.8.0
J'ai crée un projet "Console Application" en type de Projet "Projet C".
J'ai copié/collé le fichier C de VS, j'ai viré les pragma et j'ai linké la lib "libws2_32.a"
et cela fonctionne.
Dsl mais je ne connais pas devcpp donc j'en sais pas plus.
Attend ptet un pro du dev ss devcpp
mais c'est quand même la librairie libwsock32.a???
tes sur que tout est bien dans le code???
et c'est quand même DevC++
Merci
donc moi j'ai des erreur et mon linker il dise :
gcc: c:\documents and settings\h\bureau\programmation\untitled1.o: No such file or directory
gcc: file path prefix `C:\DEV-C_~1\Bin\' never used
Merci
Il y a 477 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.
