Aplikacje sieciowe
Obiekty typu Socket
ServerSocket ClientSocket
Socket
Socket Socket
Socket
Socket
ClientSocket
Socket
Socket gniazdo = new Socket(nazwa hosta , nr portu );
gniazdo.getInputStream() gniazdo.getOutputStream() Gniazdo.close()
Porty 1 – 1024 zarezerwowane są na usługi systemowe !!
(Assigned Numbers Authority)
Można używać dla swoich celów portów o numerach większych niż 1024 i mniejszych od 65535.
Niektóre wyższe numery portów są wykorzystywane->
www.sockets.com/services.htm
ServerSocket gniazdoS = new ServerSocket(port);
Socket gniazdo = gniazdoS.accept();
gniazdoS.close();
Obiekt Socket na platformie .NET
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
Socket s = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
Socket w aplikacji klienta
private Socket clientSocket;
...
clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
}
clientSocket.Connect("localhost", 1000);
byte[] buffer = new byte[200];
buffer = Encoding.ASCII.GetBytes(„UserName = R2D2");
clientSocket.Send(buffer);
Implementacja Serwera
Socket serverSocket;
Socket handler;
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
IPAddress ipAddress = ipHostInfo.AddressList[0];
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 1000);
serverSocket.Bind(localEndPoint);
serverSocket.Listen(10);
...
handler = serverSocket.Accept();
...
byte[] buffer= new byte[200];
bytesRead = handler.Receive(buffer);
„Asynchroniczny” Socket
public class StateObject {
public Socket socket;
public byte[] buffer = new byte[1024];
} ....
Socket socket;
...
StateObject stateObject = new StateObject();
socket.BeginReceive(stateObject.buffer, 0, stateObject.buffer.Length, SocketFlags.None,
new AsyncCallback(ReceiveData), stateObject);
Akceptacja połączenia
public void AcceptUser(IAsyncResult ar) {
Socket listener = (Socket)ar.AsyncState;
Socket handler = listener.EndAccept(ar);
}
Form.CheckForIllegalCrossThreadCalls = false;
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
IPAddress ipAddress = ipHostInfo.AddressList[0];
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 1000);
serverSocket.Bind(localEndPoint);
serverSocket.Listen(10);
serverSocket.BeginAccept(new AsyncCallback(AcceptUser),serverSocket);
Odbiór danych
public void ReceiveData(IAsyncResult result) {
StateObject state=(StateObject) result.AsyncState;
Socket s = state.socket;
int bytesRead=s.EndReceive(result);
if (bytesRead > 0) {
DisplayTextBox.AppendText(
Encoding.ASCII.GetString(state.buffer,0,bytesRead) + "\n");
s.BeginReceive(state.buffer, 0, state.buffer.Length, SocketFlags.None,
new AsyncCallback(ReceiveData), state);
}
else
{
DisplayTextBox.AppendText("Koniec transmisji\n");
} }