Network


Console.WriteLine( System.Net.Dns.GetHostName() ); // IP を取得 System.Net.IPHostEntry h = System.Net.Dns.GetHostEntry("pc"); Console.WriteLine(System.Net.Dns.GetHostName()); Console.WriteLine( h.AddressList[0].ToString() );



TcpClient


using System.Net.Sockets; System.Net.Sockets.TcpClient c = new System.Net.Sockets.TcpClient(); try { c.Connect("pc", 8080); NetworkStream s = c.GetStream(); byte[] b = Encoding.ASCII.GetBytes( "GET / HTTP/1.0\r\n\r\n" ); s.Write( b, 0, b.Length ); byte[] rb = new byte[8 * 1024]; s.Read(rb, 0, rb.Length); Console.WriteLine( Encoding.ASCII.GetString( rb ) ); c.Close(); } catch (Exception ex) { Console.WriteLine("aaa"); }



TcpListener


DESC TCPサーバ側の機能を提供するクラス。
using System.Net.Sockets; using System.Net; // port番号 2000 でサーバーを開始する。 TcpListener srv = new TcpListener( IPAddress.Any, 2000 ); srv.Start(); // クライアントの接続まちをする。 TcpClient c = srv.AcceptTcpClient(); // 接続できたら、相手の言ったことをstdoutへ出力する。 NetworkStream st = c.GetStream(); byte[] buf = new byte[1024]; st.Read(buf, 0, 1024); string ret = Encoding.ASCII.GetString( buf, 0, 1024 ); Console.WriteLine( "client msg = {0}", ret ); // サーバをとめる。 srv.Stop();
繰り返し対応をする。
static private void ClientHandler(TcpClient c) { byte[] buf = new byte[1024]; NetworkStream st = c.GetStream(); // 相手が接続を切ると 0 が返る。 while ( st.Read(buf, 0, 1024) != 0 ) { string ret = Encoding.ASCII.GetString( buf, 0, 1024 ); Console.WriteLine( "client msg = {0}", ret ); } }
上の処理では一人しか相手をできないので、 スレッドプールへ処理を投げる。
{ while (true) { // メイン処理では客まちだけをして TcpClient c = srv.AcceptTcpClient(); // 相手をするのは従業員にまかせる。 ThreadPool.QueueUserWorkItem(new WaitCallback(ClientHandler), c); } } static private void ClientHandler(Object o) { TcpClient c = ( TcpClient )o; byte[] buf = new byte[1024]; NetworkStream st = c.GetStream(); // 相手が接続を切ると 0 が返る。 while ( st.Read(buf, 0, 1024) != 0 ) { string ret = Encoding.ASCII.GetString( buf, 0, 1024 ); Console.WriteLine( "client msg = {0}", ret ); } }