networking tworzenie połączeń sieciowych · gniazda udp, tcp · klasy transportowe

25
NETWORKING tworzenie połączeń sieciowych gniazda UDP, TCP klasy transportowe klasy protokółów programowanie asynchroniczne

Upload: faris

Post on 11-Jan-2016

33 views

Category:

Documents


0 download

DESCRIPTION

NETWORKING tworzenie połączeń sieciowych · gniazda UDP, TCP · klasy transportowe · klasy protokółów · programowanie asynchroniczne. · gniazda UDP - odbiorca Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: NETWORKING tworzenie połączeń sieciowych · gniazda UDP, TCP · klasy transportowe

NETWORKING

tworzenie połączeń sieciowych

       gniazda UDP, TCP

       klasy transportowe

       klasy protokółów

       programowanie asynchroniczne

Page 2: NETWORKING tworzenie połączeń sieciowych · gniazda UDP, TCP · klasy transportowe

       gniazda UDP

- odbiorca

Socket listener =

new Socket(AddressFamily.InterNetwork,

SocketType.Dgram, ProtocolType.Udp);

IPEndPoint localEP = // adres odbiorcy

new IPEndPoint(IPAddress.Any, 5001);

listener.Bind(localEP);

Page 3: NETWORKING tworzenie połączeń sieciowych · gniazda UDP, TCP · klasy transportowe

IPEndPoint tempRemoteEP = // adres nadawcy

new IPEndPoint(IPAddress.Any, 5002);

EndPoint trEP = (EndPoint)tempRemoteEP;

listener.Poll(-1, SelectMode.SelectRead);

listener.ReceiveFrom(buffer, ref trEP);

Page 4: NETWORKING tworzenie połączeń sieciowych · gniazda UDP, TCP · klasy transportowe

- nadawca

string listener = "localhost";

Socket client =

new Socket(AddressFamily.InterNetwork,

SocketType.Dgram, ProtocolType.Udp);

IPEndPoint localEP = // adres nadawcy

new IPEndPoint(IPAddress.Any, 5002);

client.Bind(localEP);

Page 5: NETWORKING tworzenie połączeń sieciowych · gniazda UDP, TCP · klasy transportowe

buffer = Encoding.ASCII.GetBytes(message);

ipaddress = Dns.GetHostEntry(listener).AddressList[0];

IPEndPoint remoteEP = // adres odbiorcy

new IPEndPoint(ipaddress, 5001);

client.SendTo(buffer, 0, buffer.Length,

SocketFlags.None, remoteEP);

UDPSocket

Page 6: NETWORKING tworzenie połączeń sieciowych · gniazda UDP, TCP · klasy transportowe

       gniazda TCP

- odbiorca

Socket GetListenerSocket(string host, int port)

{

Socket s = null, ts;

IPEndPoint lep;

IPHostEntry iphe = Dns.GetHostEntry(host);

foreach(IPAddress ipa in iphe.AddressList)

{

lep = new IPEndPoint(ipa, port);

ts = new Socket(lep.AddressFamily,

SocketType.Stream, ProtocolType.Tcp);

Page 7: NETWORKING tworzenie połączeń sieciowych · gniazda UDP, TCP · klasy transportowe

try

{

ts.Bind(lep);

ts.Listen(2); // max 2 waiting connections

s = ts;

break;

}

catch ( . . . )

{ . . . }

return s;

}

Page 8: NETWORKING tworzenie połączeń sieciowych · gniazda UDP, TCP · klasy transportowe

Socket server = GetListenerSocket("localhost", 5010);

Socket s = server.Accept();

byte[] responseData = new byte[128];

int bytesRead;

try

{

bytesRead = s.Receive(responseData);

. . .

}

catch . . .

{

...

}

Page 9: NETWORKING tworzenie połączeń sieciowych · gniazda UDP, TCP · klasy transportowe

- nadawca

Socket GetSocket(string host, int port)

{

Socket s = null, ts;

IPEndPoint ipe;

IPHostEntry iphe = ns.GetHostEntry(host);

foreach(IPAddress ipa in iphe.AddressList)

{

ipe = new IPEndPoint(ipa, port);

ts = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

Page 10: NETWORKING tworzenie połączeń sieciowych · gniazda UDP, TCP · klasy transportowe

try

{ ts.Connect(ipe);

s = ts;

break; }

catch ( . . .) { . . .}

}

return s;

}

Socket s = GetSocket("localhost", 5010);

if(s == null)

return;

s.Send(buffer); TCPSocket

Page 11: NETWORKING tworzenie połączeń sieciowych · gniazda UDP, TCP · klasy transportowe

       klasa transportowa UDP UdpClient

- odbiorca

UdpClient listener = new UdpClient(port);

IPEndPoint remoteEp = new IPEndPoint(IPAddress.Any, port);

 

byte[] buffer =

listener.Receive(ref remoteEp);

Page 12: NETWORKING tworzenie połączeń sieciowych · gniazda UDP, TCP · klasy transportowe

- nadawca

UdpClient client = new UdpClient(port);

byte[] buffer = Encoding.ASCII.GetBytes(message);

client.Send(buffer, buffer.Length, listener, port);

client.Close();

UDPClass

Page 13: NETWORKING tworzenie połączeń sieciowych · gniazda UDP, TCP · klasy transportowe

       klasy transportowe TCP TcpListener TcpClient

- odbiorca

TcpListener listener = new TcpListener(port);

listener.Start();

if (listener.Pending())

{ TcpClient s = listener.AcceptTcpClient();

NetworkStream stream = s.GetStream(); }

//

int bytesRead = stream.Read(responseData, 0, responseData.Length); // byte[]

Page 14: NETWORKING tworzenie połączeń sieciowych · gniazda UDP, TCP · klasy transportowe

- nadawca

TcpClient client = new TcpClient();

client.Connect(listener, port);

NetworkStream stream = client.GetStream();

stream.Write(buffer, 0, buffer.Length);

//

if (stream.DataAvailable)

bytesRead =

stream.Read(buffer, 0, buffer.Length);

TCPClasses

Page 15: NETWORKING tworzenie połączeń sieciowych · gniazda UDP, TCP · klasy transportowe

       przesyłanie z wykorzystaniem protokółu SOAP

- odbiorca

NetworkStream ns = tcpclient.GetStream();

SoapFormatter channel = new SoapFormatter();

message = (string)channel.Deserialize(ns);

- nadawca

SoapFormatter channel = new SoapFormatter();

channel.Serialize(tcpclient.GetStream(), message); TCPSOAP

Page 16: NETWORKING tworzenie połączeń sieciowych · gniazda UDP, TCP · klasy transportowe

       klasy protokółów - FTP

- klasa WebClient

Uri libra = new Uri (@"ftp://man.put.poznan.pl/Nowy.txt");

if (libra.Scheme != Uri.UriSchemeFtp) return;

WebClient request = new WebClient();

request.Credentials = new NetworkCredential(name, pass);//

request.DownloadFile(libra.ToString(), @"Nowy.txt"); //

request.UploadFile(libra.ToString(), @"Nowy.txt"); Get1

Page 17: NETWORKING tworzenie połączeń sieciowych · gniazda UDP, TCP · klasy transportowe

- klasy FtpWebRequest FtpWebResponse

Uri libra = new Uri(@"ftp://man.put.poznan.pl");

FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(libra);

request.Credentials = new NetworkCredential(name, pass);

request.UseBinary = false;

request.Method = WebRequestMethods.Ftp.ListDirectory;

FtpWebResponse response = (FtpWebResponse)request.GetResponse();

Stream responseStream = response.GetResponseStream(); Get2

Page 18: NETWORKING tworzenie połączeń sieciowych · gniazda UDP, TCP · klasy transportowe

       klasy protokółów - HTTP, HTTPS, FILE

- WebClient

string address = @"http://www.cs.put.poznan.pl/jkniat/HT.html";

// @"https://poczta.put.poznan.pl"

// @"file://D:/HT.html

WebClient wc = new WebClient();

//

Console.WriteLine(Encoding.ASCII.GetString (wc.DownloadData(address)));

//

wc.DownloadFile(address, "HTcopy.html");Get1

Page 19: NETWORKING tworzenie połączeń sieciowych · gniazda UDP, TCP · klasy transportowe

- WebRequest WebResponse

string address = @"http://www.cs.put.poznan.pl/jkniat/HT.html";

WebRequest request = WebRequest.Create(address);

WebResponse response = request.GetResponse();

StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.ASCII);

Console.WriteLine(reader.ReadToEnd());

Get2, HTTPpage

Page 20: NETWORKING tworzenie połączeń sieciowych · gniazda UDP, TCP · klasy transportowe

       programowanie asynchroniczne

- TCP Socket Server

ManualResetEvent AcceptEvent = new ManualResetEvent(false);

//

ManualResetEvent ReceiveEvent = new ManualResetEvent(false);

// synchronizacja wątków za pomocą zgłaszania // zdarzeń i oczekiwania na zdarzenia:// .WaitOne() .Set() .Reset()

Page 21: NETWORKING tworzenie połączeń sieciowych · gniazda UDP, TCP · klasy transportowe

void Start()

{

Socket srv = GetLisSocket ("localhost", port);

AcceptEvent.Reset();

ReceiveEvent.Reset();

srv.BeginAccept( new AsyncCallback(AcceptCallback), srv);

AcceptEvent.WaitOne(); // oczekiwanie na sygnał

}

Page 22: NETWORKING tworzenie połączeń sieciowych · gniazda UDP, TCP · klasy transportowe

void AcceptCallback(IAsyncResult result)

{Socket temp = (Socket) result.AsyncState;

Socket a = temp.EndAccept(result);

asyncData.socket = a;

IAsyncResult recres = a.BeginReceive(ad.RecBytes,

0, 256, 0,

new AsyncCallback(ReceiveCallback),

ad);

 ReceiveEvent.WaitOne(); // oczekiwanie

AcceptEvent.Set(); // sygnał dla Start

}

Page 23: NETWORKING tworzenie połączeń sieciowych · gniazda UDP, TCP · klasy transportowe

void ReceiveCallback(IAsyncResult result)

{

int bytes = ad.socket.EndReceive(result); if (bytes > 0) {

string data = Encoding.ASCII.GetString(ad.RecBytes, 0, bytes); Console.WriteLine("Odebrano: [" + data + "]\n");

}

ReceiveEvent.Set(); // sygnał dla AcceptCallback

}

AsyTCP

Page 24: NETWORKING tworzenie połączeń sieciowych · gniazda UDP, TCP · klasy transportowe

- HTTP

string address = @"http://www.cs.put.poznan.pl";

WebRequest request = WebRequest.Create(address);

AsyncResponseData ad = new AsyncResponseData(request);

IAsyncResult responseResult =

request.BeginGetResponse

(new AsyncCallback(ResponseCallback),

ad);

Page 25: NETWORKING tworzenie połączeń sieciowych · gniazda UDP, TCP · klasy transportowe

void ResponseCallback(IAsyncResult result)

{AsyncResponseData ar = (AsyncResponseData)result.AsyncState;

WebRequest request = ar.Request;

WebResponse response = request.EndGetResponse(result);

Stream stream = response.GetResponseStream();

AsyncReadData ad = new AsyncReadData(stream);

IAsyncResult readResult = stream.BeginRead(ad.Buffer, 0, ad.Buffer.Length, new AsyncCallback(ReadCallback), ad);

. . . } AsyPage