Giriş
TCP işlemleri için ik seçeneğimiz var. İlk seçenek Socket sınıfını kullanmak. İkinci seçenek ise TcpListener ve TcpClient sınıflarını kullanmak. TcpListener ve TcpClient çok daha kolay arayüzler sundukları için tercih etmek gerekir.
Bir sunucu socketi açmak için TcpListener kullanılır. Basit bir örnek şöyledir.
Tüm arayüzleri dinlemek için şöyle yaparız.
TcpClient nesnesi döndürür. TcpClient ile NetworkStream kullanılabilir.
Bu örnekte ThreadPool kullanılıyor.
Task Parallel Library ile kullanılmak üzere tasarlanmış. Şöyle yaparız.
Socket döndürür.
Şöyle yaparız.
AcceptTcpClient() metodundan önce çağrılmalıdır. Şöyle yaparız.
Şöyle yaparız.
TCP işlemleri için ik seçeneğimiz var. İlk seçenek Socket sınıfını kullanmak. İkinci seçenek ise TcpListener ve TcpClient sınıflarını kullanmak. TcpListener ve TcpClient çok daha kolay arayüzler sundukları için tercih etmek gerekir.
Bir sunucu socketi açmak için TcpListener kullanılır. Basit bir örnek şöyledir.
TcpListener tcpListener = new TcpListener(IPAddress.Any, 1234);
tcpListener.Start();
while (true)
{
TcpClient tcpClient = tcpListener.AcceptTcpClient();
byte[] data = new byte[1024];
NetworkStream ns = tcpClient.GetStream();
int recv = ns.Read(data, 0, data.Length);
}
ConstructorTüm arayüzleri dinlemek için şöyle yaparız.
TcpListener listener = new TcpListener(IPAddress.Any , 8000);
Belli bir IP adresini dinlemek için şöyle yaparız.const int PORT_NO = 2201;
const string SERVER_IP = "127.0.0.1";
IPAddress localAdd = IPAddress.Parse(SERVER_IP);
TcpListener tcpListener = new TcpListener(localAdd, PORT_NO);
AcceptTcpClient metoduTcpClient nesnesi döndürür. TcpClient ile NetworkStream kullanılabilir.
TcpClient tcpClient = tcpListener.AcceptTcpClient();
Her client için bir thread açan basit örnekler şöyle.Bu örnekte ThreadPool kullanılıyor.
ThreadPool.QueueUserWorkItem(ThreadProc, tcpClient);
private static void ThreadProc(object obj)
{
var tcpClient = (TcpClient)obj; // Do your work here
}
Bu örnekte yeni bir Thread açılıyor.// Start a thread to handle this client...
new Thread(() => HandleClient(tcpClient
)).Start();
Bu örnekte Task Parallel Library kullanılıyor.// Start a task to handle this client...
Task.Run(() => HandleClient(tcpClient
));
AcceptTcpClientAsync metoduTask Parallel Library ile kullanılmak üzere tasarlanmış. Şöyle yaparız.
public async void StartListener() //non blocking listener
{
listener = new TcpListener(ipAddress, port);
listener.Start();
while (listening)
{
var client = await listener.AcceptTcpClientAsync().ConfigureAwait(false);
// We are already in the new task to handle this client...
HandleClient(client);
}
}
//... in your code
StartListener();
AcceptSocketSocket döndürür.
Socket s = tcpListener.AcceptSocket();
BeginAcceptTcpClient metoduŞöyle yaparız.
private void StartListening()
{
server.BeginAcceptTcpClient (AcceptTcpClient,server);
}
private void AcceptTcpClient(IAsyncResult ar)
{
TcpListener listener = (TcpListener)ar.AsyncState;
TcpClient (client = listener.EndAcceptTcpClient (ar)));
StartListening ();
}
Start metoduAcceptTcpClient() metodundan önce çağrılmalıdır. Şöyle yaparız.
tcpListener.Start();
Stop metodu
Şöyle yaparız.
tcpListener.Stop();
Hiç yorum yok:
Yorum Gönder