cs_danyclassique
Messages postés94Date d'inscriptionsamedi 1 décembre 2007StatutMembreDernière intervention 7 novembre 2010
-
2 mai 2009 à 21:56
cs_danyclassique
Messages postés94Date d'inscriptionsamedi 1 décembre 2007StatutMembreDernière intervention 7 novembre 2010
-
17 mai 2009 à 17:34
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
static
void 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 =
new
TcpListener(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 =
new
byte[100];
int k = s.Receive(b);
Console.WriteLine(
"Recieved...");
for (
int i = 0; i < k; i++)
Console.Write(
Convert.ToChar(b[i]));
ASCIIEncoding asen =
new
ASCIIEncoding();s.Send(asen.GetBytes(
cs_Robert33
Messages postés834Date d'inscriptionsamedi 15 novembre 2008StatutMembreDernière intervention14 janvier 201733 3 mai 2009 à 10:31
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.
cs_danyclassique
Messages postés94Date d'inscriptionsamedi 1 décembre 2007StatutMembreDernière intervention 7 novembre 2010 3 mai 2009 à 11:58
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
cs_danyclassique
Messages postés94Date d'inscriptionsamedi 1 décembre 2007StatutMembreDernière intervention 7 novembre 2010 17 mai 2009 à 01:35
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
cs_danyclassique
Messages postés94Date d'inscriptionsamedi 1 décembre 2007StatutMembreDernière intervention 7 novembre 2010 17 mai 2009 à 17:34
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 .
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