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 );
}
}