Csharp/CSharp Tutorial/Network/TcpListener
Содержание
Asynch Network Server
<source lang="csharp">using System; using System.Collections.Generic; using System.Net; using System.Net.Sockets; using System.Text;
class ClientHandler { private byte[] buffer = new byte[256]; private Socket socket; private NetworkStream networkStream; private AsyncCallback callbackRead; private AsyncCallback callbackWrite; public ClientHandler(Socket socketForClient) { socket = socketForClient; networkStream = new NetworkStream(socketForClient); callbackRead = new AsyncCallback(this.OnReadComplete); callbackWrite = new AsyncCallback(this.OnWriteComplete); } public void StartRead() { networkStream.BeginRead(buffer, 0, buffer.Length,callbackRead, null); } private void OnReadComplete(IAsyncResult ar) { int bytesRead = networkStream.EndRead(ar); if (bytesRead > 0) { string s = System.Text.Encoding.ASCII.GetString(buffer, 0, bytesRead); Console.Write(s); networkStream.BeginWrite(buffer, 0, bytesRead, callbackWrite, null); } else { networkStream.Close(); socket.Close(); networkStream = null; socket = null; } } private void OnWriteComplete(IAsyncResult ar) { networkStream.EndWrite(ar); networkStream.BeginRead(buffer, 0, buffer.Length,callbackRead, null); } } public class AsynchNetworkServer { public static void Main() { IPAddress localAddr = IPAddress.Parse("127.0.0.1"); TcpListener tcpListener = new TcpListener(localAddr, 65000); tcpListener.Start(); for (; ; ) { Socket socketForClient = tcpListener.AcceptSocket(); ClientHandler handler =new ClientHandler(socketForClient); handler.StartRead(); } } }</source>
Create a Socket server from TcpListener
<source lang="csharp">using System; using System.IO; using System.Net.Sockets ; class MainClass {
public static void Main() { TcpListener tcpl = new TcpListener(9999); tcpl.Start(); for (;;) { Socket newSocket = tcpl.AcceptSocket(); if (newSocket.Connected) { NetworkStream ns = new NetworkStream(newSocket); byte[] buf = {1,2,3,4,5,6,7,8,9}; ns.Write(buf, 0, 9); ns.Flush(); ns.Close(); } newSocket.Close(); break; } }
}</source>
Create BinaryWriter and BinaryReader from TcpListener
<source lang="csharp">using System; using System.IO; using System.Net; using System.Net.Sockets; class MainClass {
public static void Main() { TcpListener listener = new TcpListener(IPAddress.Parse("127.0.0.1"), 8000); Console.WriteLine("About to initialize port."); listener.Start(); Console.WriteLine("Listening for a connection..."); try { using (TcpClient client = listener.AcceptTcpClient()) { Console.WriteLine("Connection accepted."); NetworkStream stream = client.GetStream(); using (BinaryWriter w = new BinaryWriter(stream)) { } using (BinaryReader r = new BinaryReader(stream)) { } } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } finally { listener.Stop(); Console.WriteLine("Listener stopped."); } }
}</source>
Listening for sockets
<source lang="csharp">using System; using System.Net; using System.Text; using System.Net.Sockets; class MainClass {
[STAThread] static void Main(string[] args) { int PortNumber = 10000; TcpListener MyListener = new TcpListener(IPAddress.Parse("127.0.0.1"), PortNumber); MyListener.Start(); Console.WriteLine("Waiting For Connection"); TcpClient MyClient = MyListener.AcceptTcpClient(); Console.WriteLine("Connection Accepted"); NetworkStream MyNetStream = MyClient.GetStream(); String Response = "accepted"; Byte[] SendTheseBytes = Encoding.ASCII.GetBytes(Response); MyNetStream.Write(SendTheseBytes, 0, SendTheseBytes.Length); MyClient.Close(); MyListener.Stop(); }
}</source>
TcpListener Sample
<source lang="csharp">using System; using System.Net; using System.Net.Sockets; using System.Text; class MainClass {
public static void Main() { int receivedDataLength; byte[] data = new byte[1024]; TcpListener socket = new TcpListener(9999); socket.Start(); TcpClient client = socket.AcceptTcpClient(); NetworkStream ns = client.GetStream(); string welcome = "Welcome"; data = Encoding.ASCII.GetBytes(welcome); ns.Write(data, 0, data.Length); while(true) { data = new byte[1024]; receivedDataLength = ns.Read(data, 0, data.Length); Console.WriteLine(Encoding.ASCII.GetString(data, 0, receivedDataLength)); ns.Write(data, 0, receivedDataLength); } ns.Close(); client.Close(); socket.Stop(); }
}</source>
Time Server
<source lang="csharp">using System.Net.Sockets; using System.IO; using System; using System.Threading; public class TimeServer {
public static void Main() { TcpListener server = new TcpListener(55555); server.Start(); Console.WriteLine("Waiting for connections"); while (true) { Socket client = server.AcceptSocket(); Console.WriteLine("New connection detected on " + client.Handle); ClientHandler ch = new ClientHandler(client); } }
} class ClientHandler {
private Socket client; public ClientHandler(Socket client) { this.client = client; Thread clientThread = new Thread(new ThreadStart(ClientSession)); clientThread.Start(); } public void ClientSession() { NetworkStream netStream = new NetworkStream(client); BinaryWriter timeOut = new BinaryWriter(netStream); String time = DateTime.Now.ToString(); timeOut.Write(time); timeOut.Close(); netStream.Close(); client.Close(); }
}</source>
Use NetworkStream to write to a client
<source lang="csharp">using System; using System.IO; using System.Net.Sockets ; class MainClass {
public static void Main() { TcpListener tcpl = new TcpListener(9999); tcpl.Start(); for (;;) { Socket newSocket = tcpl.AcceptSocket(); if (newSocket.Connected) { NetworkStream ns = new NetworkStream(newSocket); byte[] buf = {1,2,3,4,5,6,7,8,9}; ns.Write(buf, 0, 9); ns.Flush(); ns.Close(); } newSocket.Close(); break; } }
}</source>
Use TcpListener to create a Tcp server
<source lang="csharp">using System; using System.IO; using System.Net; using System.Net.Sockets; class MainClass {
public static void Main() { TcpListener listener = new TcpListener(IPAddress.Parse("127.0.0.1"), 8000); Console.WriteLine("About to initialize port."); listener.Start(); Console.WriteLine("Listening for a connection..."); try { using (TcpClient client = listener.AcceptTcpClient()) { Console.WriteLine("Connection accepted."); NetworkStream stream = client.GetStream(); using (BinaryWriter w = new BinaryWriter(stream)) { } using (BinaryReader r = new BinaryReader(stream)) { } } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } finally { listener.Stop(); Console.WriteLine("Listener stopped."); } }
}</source>