dve ipcky

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod jurgen 4. 4. 2008 19:15

guten morgen,

mam dve ipcky na jednom NIC (resp. servery - win2003) a potreboval by som prinutit aplikaciu aby pouzivala jednu alebo druhu (=aby traffic isiel z jednej konkretnej ipcky).

neviem ci to vobec ide nejak standardne a jednoduchsie jak nak lowlevelovo prepisovat pakety...

dik
jurgen
jurgen
Kolemjdoucí

Odeslat příspěvekod K8 4. 4. 2008 19:38

to, jakou IP adresu ta aplikace pouziva je jen jeji veci - tedy melo by se to v ni nekde nechat nakonfigurovat
K8
Pokročilý

Odeslat příspěvekod jurgen 4. 4. 2008 19:47

to som si prave neni celkom isty, ale velmi rad by som sa mylil...

napr.
TcpClient client = new TcpClient();
client.Connect(serverEndPoint);
NetworkStream clientStream = client.GetStream();
clientStream.Write(buffer, 0, buffer.Length);

myslis ze existuje metoda (TcpClient predpokladam) kde mozem nastavit ipcku klienta (seba)? obavam sa za ta ipcka sa prideli niekde na systemovej urovni a zmenit ju tak lahko nepojde..
jurgen
Kolemjdoucí

Odeslat příspěvekod Nargon 4. 4. 2008 21:32

Samozrejme ze to jde. Podle toho zdrojaku to vypada na C#, tak tady mas takovou malou testovaci aplikaci:

Kód: Vybrat vše
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace ConsoleApplication8
{
    class Program
    {
        static void Naslouchac()
        {
            TcpListener listener = new TcpListener(IPAddress.Any, 12345); // nasloucham na vsech IP adresach a portu 12345
            listener.Start(); // spustim server
            for (int i = 0; i<2; i++) // pocitam do dvou
            {
                TcpClient s = listener.AcceptTcpClient(); //konkretni spojeni s druhou stranou
                IPEndPoint remote = (IPEndPoint)s.Client.RemoteEndPoint; // zjistim si jeji ip
                Console.WriteLine("Vzdalena strana, IP: {0}, Port: {1}", remote.Address, remote.Port); // vypisu
                s.Close(); // a zavru spojeni
            }
            listener.Stop(); // ukoncim server;
        }

        static void Main(string[] args)
        {
            Thread t = new Thread(new ThreadStart(Naslouchac));
            t.Start(); // spustim server
            Thread.Sleep(500); // pro jistotu pockam az se to vlakno nastartuje.

            TcpClient c = new TcpClient(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 0)); // zvolim ip "zdroje" a nahodny port
            c.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 12345)); // navazu spojeni
            c.Close(); // uzavrit spojeni
         
            c = new TcpClient(new IPEndPoint(IPAddress.Parse("10.0.0.1"), 55555)); //ip zdroje a presne definovany port
            c.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 12345)); // navazu spojeni
            c.Close(); // ukoncit spojeni

            Console.ReadLine(); // cekam na enter
        }
    }
}

A vystupem je:
Kód: Vybrat vše
Vzdalena strana, IP: 127.0.0.1, Port: 1292
Vzdalena strana, IP: 10.0.0.1, Port: 55555

Tedy dvakrat se pripojim na stejny server a jednou mam localhost ip, a podruhe mam lan ip. Neni v tom zadny problem.
Nargon
Moderátor


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků