Witam wszystkich. Napisałem niedawno prostą aplikację, której zadaniem jest przesyłanie obrazu między komputerami w sieci. Aplikacja działa na adresie host bez problemu a także gdy do kompa podłącze bezpośrednio drugi komputer. Niestety jeśli podłącze drugi komputer przez router aplikacja nie chce się połączyć z serwerem. Próbowałem znaleŹć rozwiązanie lecz niestety nie mogę dojść dlaczego.
Jeśli chodzi o kod to podam to co jest w backgroundworkerach bo tam jest kod odpowiedzialny za połączenie i wysłanie.
Kod klienta
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
string host = textBox1.Text; //adres z textboxa
int port = Convert.ToInt16(numericUpDown1.Value); //nr portu z pola numerycznego
try
{
TcpClient klient = new TcpClient(host, port);
UstawTekst("Nawiazano polaczenie");
NetworkStream ns = klient.GetStream();
BinaryWriter pisanie = new BinaryWriter(ns);
pisanie.Write("Witaj serwerze. Rozpoczynam wysyalnie zdjecia");
pisanie.Write("wys"); //wysyła komendę. Jeśli serwer ją odbierze wie że wtedy ma uruchomić odbieranie zdjęcia
pisanie.Write((int)tablicaZdjecia.Length); //tablica zdjęcia jest tablicą typu byte[]
pisanie.Write(tablicaZdjecia);
pisanie.Write("Serwerze zdjecie zostalo wyslane");
pisanie.Write("by"); //komenda pożegnalna
klient.Close();
}
catch (Exception ex)
{
UstawTekst("Blad: nie udalo sie nawiazac polaczenia");
}
}
Kod serwera:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
IPAddress adresIP = null;
try
{
adresIP = IPAddress.Parse(textBox1.Text); //adres z textboxa
}
catch
{
MessageBox.Show("Zly format IP");
}
int port = Convert.ToInt16(numericUpDown1.Value); //numer portu
try
{
serwer = new TcpListener(adresIP, port);
serwer.Start();
klient = serwer.AcceptTcpClient();
UstawTekst("Nawiazano polaczenie");
button1.Enabled = false; //malo wazne
button2.Enabled = true; //malo wazne
NetworkStream ns = klient.GetStream();
BinaryReader czytanie = new BinaryReader(ns);
while (przerwanie == false)
{
string s = czytanie.ReadString();
UstawTekst(s);
if (s == "wys")
{
UstawTekst("Otrzymano potwierdzenie wysylania obrazu przez klienta");
//tutaj zaczyna odbierać tablice zdjecia
int rozmiar = czytanie.ReadInt32();
tablicaZdjecia = czytanie.ReadBytes(rozmiar);
using (MemoryStream ms = new MemoryStream(tablicaZdjecia))
{
//tutaj przetwarza tablice na zdjęcie
Image zdjecie = Image.FromStream(ms);
UstawZdjecie(zdjecie);
}
//przeranie = true;
}
if (s == "by")
przerwanie = true;
}
}
catch
{
UstawTekst("Blad inicjacji serwer");
}
}
Za wszelkie informację z góry dzięki