Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako server socket evidentira da se klijent nakačio na njega u c#?

[es] :: .NET :: Kako server socket evidentira da se klijent nakačio na njega u c#?

[ Pregleda: 2147 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

igiczoran

Član broj: 23032
Poruke: 20
*.dynamic.sbb.rs.



Profil

icon Kako server socket evidentira da se klijent nakačio na njega u c#?22.05.2009. u 17:48 - pre 181 meseci
Nakon inicicjalizacije socketa na serveru

Code:
   
IPHostEntry MojHostEntry = Dns.GetHostEntry(Dns.GetHostName());
IPAddress HostIP = MojHostEntry.AddressList[0];
            

IPEndPoint ipKrajnjaTackaserver = new IPEndPoint(HostIP, 10000);
serversocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serversocket.Bind(ipKrajnjaTackaserver);
serversocket.Listen(10);


kako server aplikacija "primeti" da je kontaktira klijent?
Tj kako bi izgledao kod u kome server socket prima podatke, npr dogadjaj OnReceive ili tako nešto?


Oni koji ne znaju kuda idu bi trebali da pripaze, jer možda ne stignu tamo kuda su pošli...
 
Odgovor na temu

Radovan__III
Radovan__III
Beograd

Član broj: 15669
Poruke: 1245
79.101.244.*



+26 Profil

icon Re: Kako server socket evidentira da se klijent nakačio na njega u c#?22.05.2009. u 18:17 - pre 181 meseci
trebalo bi da bude

serversocket.Accept();
Aj sad svi u biblioteku da nesto pojedemo i popijemo ...
--------------------------------
Knjigovodstvo

 
Odgovor na temu

igiczoran

Član broj: 23032
Poruke: 20
*.dynamic.sbb.rs.



Profil

icon Re: Kako server socket evidentira da se klijent nakačio na njega u c#?24.05.2009. u 12:29 - pre 181 meseci

ali kada da pozovem Accept()? u kom događaju?
Oni koji ne znaju kuda idu bi trebali da pripaze, jer možda ne stignu tamo kuda su pošli...
 
Odgovor na temu

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 572
77.46.213.*

Jabber: DarkMan


Profil

icon Re: Kako server socket evidentira da se klijent nakačio na njega u c#?24.05.2009. u 14:20 - pre 181 meseci
Sledeci kod je je dosta grub, bez obrada greska, cisto da ti ukaze kako bi otprilike izgledalo:
Code:
   
  byte[] buffer = new byte[4096];

  public void Listen()
  {
     ...
     socketListener.Listen(backlog);
     socketListener.BeginAccept(new AsyncCallback(OnClientConnect), socketListener);
  }

  private void OnClientConnect(IAsyncResult async)
  {
    Socket socketListener = async.AsyncState as Socket;
    Socket socket = socketListener.EndAccept(async);    
    socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(OnDataReceived), socket);
    socketListener.BeginAccept(new AsyncCallback(OnClientConnect), socketListener);
  }

  private void OnDataReceived(IAsyncResult async)
  {
    Socket socket = async.AsyncState as Socket;
    int received = socket.EndReceive(async);
    if(received > 0) {
      socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(OnDataReceived), socket);
    }
  }

Zadnji parametar metoda BeginAccept i BeginReceive je korisnicki podatak koji se prenosi u te asinhrone metode koje ce biti pozvane a u tim metoda se dobija preko IAsyncResult.AsyncState parametra. Moj predlog je da sve sto ti treba za konekciju i prenos podataka stavis u neki tvoj objekat i onda taj objekat stavis kao parametar ovih metoda. Evo ti i primer:

Code:


  public class MojiPodaci
  {
     public Socket socketListener = null;
     public Socket clientSocket = null;
     public byte[] buffer = new byte[4096];
     public int received = 0;
  }

  public void Listen()
  {
      ...
    MojiPodaci podaci = new MojiPodaci();
     socketListener.BeginAccept(new AsyncCallback(OnClientConnect), podaci);
  }

  private void OnClientConnect(IAsyncResult async)
  {
    MojiPodaci podaci = async.AsyncState as MojiPodaci;
    podaci.clientSocket = podaci.socketListener.EndAccept(async);
    ...
  }


Nadam se da si me razumeo. Ovo sto sam ti naveo je asinhrona komunikacija.
Za detalje je ipak bolje da pogledas neki kod na netu, kao na primer ovo:
http://www.codeguru.com/csharp...work/sockets/article.php/c7695
 
Odgovor na temu

[es] :: .NET :: Kako server socket evidentira da se klijent nakačio na njega u c#?

[ Pregleda: 2147 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.