begin process at 2010 02 09 22:52:57
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Réseau & Internet

 > 

Sockets

 > 

Sockets


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Sockets

samedi 2 mai 2009 à 21:56:43 | Sockets

danyclassique

Bonjour a tous,
J essaie de creer le processus d' un chat en envoyant un petit texte de test pour l instant d un pc a l autre.
J avais deja cree un chat complet qui fonctionne tres bien en local c est a dire pc a pc mais sur le meme reseau  Maintenant j essaie de le faire sur deux reseaux different
Explicatif:

J ai deux classes tres simple une server et une client que j ai repris sur le site code projet pour juste les besoins du test

sur un pc a paris il y a le server
sur un pc a venise il y a le client
et quand chaque pc insere l ip respectif du pc distant comme quand je test le tout en local cela ne fonctionne pas

J ai essaye de chercher sur le net et on parle beaucoup d' ip local comme j ai deja reussi a faire mais des qu il s' agit d ip public ca devient moins facile a trouver.
Peut etre quelqu'un pourrait m'aider ou me diriger vers une solution a ce probleme

voici les deux classes

server:

public

staticvoid Main()

{

try

{

IPAddress ipAd = IPAddress.Parse("93.173.140.235"); //use local m/c IP address, and use the same in the client

/* Initializes the Listener */

TcpListener myList = newTcpListener(ipAd, 8001);

/* Start Listeneting at the specified port */

myList.Start();

Console.WriteLine("The server is running at port 8001...");

Console.WriteLine("The local End point is :" + myList.LocalEndpoint);

Console.WriteLine("Waiting for a connection.....");

Socket s = myList.AcceptSocket();

Console.WriteLine("Connection accepted from " + s.RemoteEndPoint);

byte[] b = newbyte[100];

int k = s.Receive(b);

Console.WriteLine("Recieved...");

for (int i = 0; i < k; i++)

Console.Write(Convert.ToChar(b[i]));

ASCIIEncoding asen = newASCIIEncoding();

s.Send(asen.GetBytes(

"The string was recieved by the server."));

Console.WriteLine("\nSent Acknowledgement");

/* clean up */

s.Close();

myList.Stop();

}

catch (Exception e)

{

Console.WriteLine("Error..... " + e.StackTrace);

}

}







client:


public

staticvoid Main()

{

try

{

TcpClient tcpclnt = newTcpClient();

Console.WriteLine("Connecting.....");

tcpclnt.Connect(

"93.173.140.235", 8001); // use the ipaddress as in the server program

Console.WriteLine("Connected");

Console.Write("Enter the string to be transmitted : ");

String str = Console.ReadLine();

Stream stm = tcpclnt.GetStream();

ASCIIEncoding asen = newASCIIEncoding();

byte[] ba = asen.GetBytes(str);

Console.WriteLine("Transmitting.....");

stm.Write(ba, 0, ba.Length);

byte[] bb = newbyte[100];

int k = stm.Read(bb, 0, 100);

for (int i = 0; i < k; i++)

Console.Write(Convert.ToChar(bb[i]));

tcpclnt.Close();

}

catch (Exception e)

{

Console.WriteLine("Error..... " + e.StackTrace);

}

}


je vous remercie d avance pour votre aide

dimanche 3 mai 2009 à 10:31:29 | Re : Sockets

Robert33

Membre Club
Bonjour,

Tout d'abord il te faut verifier si les IP sont accessibles (Ping ?)
Verifie les par-feu, ceux des PC et ceux des appareil de connexion (....Box).
Si les IP sont accessibles il n'y a pas de raison que cela ne fonctionne pas.


C# is amazing, enjoy it!
dimanche 3 mai 2009 à 11:58:55 | Re : Sockets

danyclassique

bonjour,
merci pour ta reponse j ai deja verifie les parefeux et les appareils de connexion a mon niveau .
Je vais faire de meme sur le pc distant
Je reviens vers toi des que j ai du nouveau
cordialement
dany
dimanche 17 mai 2009 à 01:35:47 | Re : Sockets

danyclassique

Bonjour robert33,

Desole pour le temps tardif de ma reponse.

J ai reussi a comprendre le systeme d un routeur ,ce qu il me manquait ,pour comprendre tout cela.

apres verif je me suis apercu que mon programme marchait tres bien sauf que je l utilisais mal au niveau de l insertion des address ip de chaque ordi
J en ai profite pour augmenter un peut l utilite du programme en transmettant le bureau de l un sur l autre avec pour l instant juste le visu du bureau sans la prise en compte des evenements de la souris et du clavier cela on verra beaucoup plus tard
Ca fonctionne tres tres bien encore une fois en reseau local et en resau distant ,mon probleme, n est plus d ordre de connection mais d interpretation des image au niveau je pense du rgb je crois.
J ai teste mon nouveau programme comme un chat en reseau distant et il fonctionne tres bien mais des que j envoie les images ca marche sauf que l ecran du receveur est tout noir .

Je t envoi juste les partis client serveur de la transmition


client

Stream fs;

private void button1_Click( object sender, EventArgs e)

{

TcpClient tc = new TcpClient (textBox1.Text,2112);

NetworkStream ns = tc.GetStream();

byte [] b = CaptureTotale();

ns.Write(b, 0, b.Length);

}

[

DllImport ( "user32.dll" )]

private static extern IntPtr GetDesktopWindow();

[

DllImport ( "gdi32.dll" )]

private static extern bool BitBlt(

IntPtr hdcDest,

int nXDest,

int nYDest,

int nWidth,

int nHeight,

IntPtr hdcSrc,

int nXSrc,

int nYSrc,

int dwRop

);

private const int SRCCOPY = 0xCC0020;

public byte [] CaptureTotale()

{

IntPtr handle = GetDesktopWindow();

Graphics gScreen = Graphics .FromHwnd(handle);

Rectangle r = Screen .PrimaryScreen.Bounds;

Bitmap bmpScreen = new Bitmap (r.Width, r.Height);

Graphics gBmp = Graphics .FromImage(bmpScreen);

IntPtr hDCScreen = gScreen.GetHdc();

IntPtr hDCBmp = gBmp.GetHdc();

BitBlt(hDCBmp,

0,

0,

r.Width,

r.Height,

hDCScreen,

0,

0,

SRCCOPY);

gScreen.ReleaseHdc(hDCScreen);

gBmp.ReleaseHdc(hDCBmp);

MemoryStream ms = new MemoryStream ();

bmpScreen.Save(ms, System.Drawing.Imaging.

ImageFormat .Png);

 

byte [] b = ms.GetBuffer();

return b;

}

serveur

private void button1_Click( object sender, EventArgs e)

{

Thread th = new Thread ( new ThreadStart (Listen));

th.Start();

}

byte [] b;

int k;

public void Listen()

{

Socket Listener = new Socket ( AddressFamily .InterNetwork, SocketType .Stream, ProtocolType .Tcp);

Listener.Bind(

new IPEndPoint ( IPAddress .Any,2112));

Listener.Listen(0);

Socket s = Listener.Accept();

Stream netStream = new NetworkStream (s);

 

// Invoke(new UpdateDisplayDelegate(UpdateDisplay), new object[] { result });

b =

new byte [20000000];

k = s.Receive(b);

 

pictureBox1.Image =

new Bitmap ( new System.IO. MemoryStream (b));

s.Close();

Listener.Close();

}

public

void UpdateDisplay(string text)

{

// textBox2.Text = text;

}

protected delegate void UpdateDisplayDelegate ( string text);

La fonction updateDisplay etait pour le test de l envoi de text n y fais pas attention



Ce n est juste que pour te monter le code de maniere a te donner une idee de ma demarche au niveau de l envoi
mais dans mon reel programme il y a evidement un timer des sleep et une gestion des pointeurs entre deux images pour en deduire la difference et ainsi envoyer la difference et pas a chaque fois toutes les images complete
et d ailleurs ce systeme de pointeurs m avait ete commente par deus membres de ce site  ce qui m a ensuite permis de le finir et de le mettre en oeuvre

voila

Peut etre aurai eu une idee
Dans l attente d un retour je te remercie ou remercie tous ceux qui pourraient eventuellement m aider
cordialement
dany


dimanche 17 mai 2009 à 17:34:47 | Re : Sockets

danyclassique

Bonjour a tous
voila j ai enfin trouve le gros probleme entre le local et le distant
tous comptes fait j ai repris le system du BinaryFormatter pour serializer et deserialiser le transport de donnees


mais en utilisant cette technique j avais un probleme sur le reseau distant alors qu en reseau local cela fonctionnait
Alors pour ceux a qui ca interresse le probleme vient d un manque de comptabilite entre les frameworks installees sur chaque pc
et cela genere une erreur qui etait
Exception Message: Binary stream '0' does not contain a valid BinaryHeader. Possible causes are invalid stream or object version change between serialization and deserialization

pour remedier au probleme j ai vu sur un excelent tuto et sur un excelent site la solution .

nous avons trois possibilites de methode
la premiere c est de mettre la meme framework sur chaque pc
la deuxieme est a mon avis la plus adaptee et est de preciser la propriete 
TypeFormat du BinaryFormatter a FormatterTypeStyle
.XsdString;
La troisieme vous pouvez aller voir le site directement et les explications sont vraiement tres completes
voici le lien
http://kbalertz.com/947983/Binary-serialization-exceptions-occur-serialize-deserialize-DateTimeFormatInfo-class-TextInfo-class-between-different-versions-Framework.aspx

voila merci en tout cas a robert33 pour ton aide qui m a permit de me concentrer sur le fonctionnement de l adressage d un routeur et qui , par la suite, savoir comment employer les sockets a cet effet

J essaierai quand le programme sera termine de le mettre sur ce site pour ceux a qui cela interresse .
Je precis que pour l instant j enverai juste la version du visu sans les evennements de la souris et du clavier car cela risque de me prendre du temps vu la difficulte du probleme car je fais ca en parrallele de mon travail

cordialement

dany


Cette discussion est classée dans : pc, local, server, console, writeline


Répondre à ce message

Sujets en rapport avec ce message

Pb avec mon programme - help... [ par adrien78 ] Voici les sources de mon programme il bug :// project created on 09/11/2002 at 10:51// By Adrien HADJ SALAH// http://www.informatick.com// Pour me rem Soucis avec un switch [ par zigzou ] Voila je viens de commencer le C#, et je viens de tombé sur un problème... :(En effet je demande au user de rentré un nombre je fais mes cas et en fai Comment obtenir la liste des pc (IP ou nom de pc) d'un reseau local? [ par Tellurian ] Je cherche un code pour obtenir la liste des pc d'un reseau local car jusqua maintenant j'utilise la commande dos:net view > liste.txtle pb c'est la c erreur de strings [ par rhodan51 ] j'ai recopié l'exemple d'un bouquin mais il m'apparait une erreur lors de la compilation :[quote]chaine.cs(7,20): error CS1502: La méthode surchargée Console.WriteLine ou Console.Out.WriteLine ??? [ par rhodan51 ] dans le bouquin qui me sert à apprendre le C#, l'auteur utilise Console.Out.WriteLine pour écrire du texte en mode console. Mais en regardant divers c exporter les donnés d'une base dans un fichier.TXT [ par kmbmaster ] salut , en faite voila je suis débutant en c# dailleurs meme en programmation donc je voulais vous demander SVP si possible un peu daide .voila le Serveur en mode console [ par MorpionMx ] Bonjour, j'ai une question qui a surement une solution tout bete, mais je ne la connais pas. En fait j'ai un serveur en mode console, qui est adapté Performances / CIL [ par MorpionMx ] Bonjour a tous, J'ai envie de commencer la journée par une question de performance.Soit un programme minimaliste qui crée un entier i et qui l'affiche Access @@identity avec numauto et N° de réplication [ par cendretp ] Je n'arrive pas à récuperer le guid correspondant lors d'un insert cela fonctionne avec un entier long mais pas avec un N° de réplication. Est-ce poss Application console sur tout PC? [ par tmcuh ] Bonjour j'aurais aimé savoir si une application développer en C# (Console application) peut etre mise sur disquette est exécuter sur n'importe quel pc


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,437 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales