Host nie może połączyć sie z klientem

0

Witam mam pewien problem ponieważ chciałem zrobić proste połączenie między hostem mi klientem (zęby zrobić kiedyś możne jakiś prosty chat) i kiedy próbuje połączyć aplikacje na jednym komputerze to wszystko ładnie się łączy ale kiedy przenoszę aplikacje hosta na inny komputer to aplikacje nie chcą się połączyć

Kod Servera:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;

namespace Server
{
    class Program
    {   
        static void Main(string[] args)
        {
            try
            {
                IPAddress ipAddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0];
                IPEndPoint ipLocalEndPoint = new IPEndPoint(ipAddress, 4353);
                TcpListener server = new TcpListener(IPAddress.Any, 4353);



                server.Start();
                Console.WriteLine("Connection");
                TcpClient client = server.AcceptTcpClient();

                if (client.Connected != false)
                {
                    Console.WriteLine("You Are Connected");
                    Console.ReadKey();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            

        }
    }
}

Kod Klienta:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;


namespace Client
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            TcpClient client = new TcpClient();

            IPAddress ipAddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0];

            client.Connect(ipAddress, 4353);

            if (client.Connected != false)
            {
                checkBox1.Checked = true;
            }
        }
    }
}

0

połączenie może blokować

  1. firewall na obu kompach
  2. router po stronie serwera (brak przekierowania portów)
  3. brak publicznego IP po stronie serwera
0
abrakadaber napisał(a):

połączenie może blokować

  1. firewall na obu kompach
  2. router po stronie serwera (brak przekierowania portów)
  3. brak publicznego IP po stronie serwera
  1. czy serwer słucha na odpowiednim interfejsie a nie localhost ?
0

serwer słucha na odpowiednim interfejsie

0

a firewall i pozostałe??

btw co to za warunki client.Connected != false???

0

Jeśli te dwa komputery są 'wpięte' w jedną sieć (LAN) to bez problemu możesz się z nimi połączyć.

IPAddress ipAddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0];
client.Connect(ipAddress, 4353);

IP adres powinien być taki jak adres na którym stoi serwer, bo w ten sposób łączysz się z serwerem na twoim komputerze a tego nie chcesz.

Jeśli te komputery nie są w żaden sposób połączone musiałbyś mieć dodatkowo zewnętrzne IP oraz przekierowane porty w routerze.

0

W takich wypadkach procedura postępowania powinna wyglądać mniej więcej tak:

  1. Wypisujesz w aplikacjach adresy
  2. Sprawdzasz w systemie adresy i porty nasłuchujące.
  3. Pingujesz adresy nasłuchujące z maszyny klienta. Port możesz sprawdzić np przez telnet.
  4. Odpalasz wiresharka na kliencie i serwerze i sprawdzasz co się dzieje na poziomie ip, tcp/udp (w szczególności dla tcp czy 3 way handshake się udał), jakie arpy idą.

W twoim wypadku, jak ktoś już to zauważył, wygląda, że łączysz się na zły adres.

0
abrakadaber napisał(a):

a firewall i pozostałe??

btw co to za warunki client.Connected != false???

w tym warunku chodzi o to ze jezli host i klient sie polaczyli to wyskoczy na konsoli ze aplikacje sie polaczyly

0

nie no ja wiem po co jest ten warunek. To zapis mnie razi - czy to nie jest wg Ciebie to samo co if (client.Connected)? Czy może przewidujesz trzecią wartość poza true i false?

0
abrakadaber napisał(a):

nie no ja wiem po co jest ten warunek. To zapis mnie razi - czy to nie jest wg Ciebie to samo co if (client.Connected)? Czy może przewidujesz trzecią wartość poza true i false?

no w sumie masz racje to jest w sumie to samo co if (client.Connected) dziękuje za spostrzeżenie poprawie ten zapis w kodzie

1 użytkowników online, w tym zalogowanych: 0, gości: 1