いつもお世話になっています。
C#でTCPサーバーを作成し
ブラウザ(GoogleChrome)から
IPアドレスと指定のポート番号(127.0.0.1:2001)
を叩くと"HelloWorld"とブラウザで表示するように
接続できた場合のサーバーが返すHTMLを追加したいのですが、
既存のコードのどこに追加すればいいのかがわからないです。
既存のコードがこちらです ↓
c#
1 2// ListenするIPアドレス 3 string ipString = "127.0.0.1"; 4 System.Net.IPAddress ipAdd = System.Net.IPAddress.Parse(ipString); 5 6 // ホスト名からIPアドレスを取得する時は、以下のようにする 7 // string host = "localhost"; 8 // Sysytem.Net.IPAddress ipAdd = 9 // System.Net.Dns.GetHostEntry(host).AddressList[0]; 10 // .NET Framework 1.1以前では、以下のようにする 11 // System.Net.IPAddress ipAdd = 12 // System.Net.Dns.Resolve(host).AddressList[0]; 13 14 // Listenするポート番号 15 int port = 2001; 16 17 // TcpListenrオブジェクトを作成する 18 19 System.Net.Sockets.TcpListener listener = 20 new System.Net.Sockets.TcpListener(ipAdd, port); 21 22 // Listenを開始する 23 listener.Start(); 24 25 Console.WriteLine("Listenを開始しました({0} : {1})。", 26 ((System.Net.IPEndPoint)listener.LocalEndpoint).Address, 27 ((System.Net.IPEndPoint)listener.LocalEndpoint).Port); 28 29 // 接続要求があったら受け入れる 30 System.Net.Sockets.TcpClient client = listener.AcceptTcpClient(); 31 Console.WriteLine("クライアント({0} : {1})と接続しました。", 32 ((System.Net.IPEndPoint)listener.LocalEndpoint).Address, 33 ((System.Net.IPEndPoint)listener.LocalEndpoint).Port); 34 35 // NetworkStreamを取得 36 System.Net.Sockets.NetworkStream ns = client.GetStream(); 37 38 // 読み取り、書き込みのタイムアウトを10秒にする 39 // デフォルトはInfiniteで、タイムアウトしない 40 // (.NET Framework 2.0以上が必要) 41 ns.ReadTimeout = 10000; 42 ns.WriteTimeout = 10000; 43 44 // クライアントから送られてきたデータを受信する 45 System.Text.Encoding enc = System.Text.Encoding.UTF8; 46 bool disconnected = false; 47 System.IO.MemoryStream ms = new System.IO.MemoryStream(); 48 byte[] resBytes = new byte[256]; 49 int resSize = 0; 50 do{ 51 // データの一部を受信する 52 resSize = ns.Read(resBytes, 0, resBytes.Length); 53 // Readが0を返した時はクライアントが切断したと判断 54 if (resSize == 0){ 55 disconnected = true; 56 Console.WriteLine("クライアントが切断しました。"); 57 break; 58 } 59 // 受信したデータを蓄積する 60 ms.Write(resBytes, 0, resSize); 61 // まだ読み取れるデータがあるかどうか、データの最後が\nでない場合 62 // 受信を続ける 63 } while(ns.DataAvailable || resBytes[resSize - 1] != '\n'); 64 // 受信したデータを文字列に変換 65 string resMSG = enc.GetString(ms.GetBuffer(), 0, (int)ms.Length); 66 ms.Close(); 67 // 末尾の\nを削除 68 resMSG = resMSG.Trim('\n'); 69 Console.WriteLine(" ここが受信した文字列をデータに変換したもの:"+resMSG); 70 71 if(!disconnected){ 72 // クライアントにデータを送信する 73 74 // クライアントに送信する文字列を作成 75 string sendMSG = resMSG.Length.ToString(); 76 // 文字列をByte型配列に変換 77 byte[] sendBytes = enc.GetBytes(sendMSG + '\n'); 78 // データを送信する 79 ns.Write(sendBytes, 0, sendBytes.Length); 80 Console.WriteLine("データをクライアントに送信:"+ sendMSG); 81 } 82 83 // 閉じる 84 ns.Close(); 85 client.Close(); 86 Console.WriteLine("クライアントとの接続を閉じました。"); 87 88 // リスナを閉じる 89 listener.Stop(); 90 Console.WriteLine("Listenerを閉じました。"); 91 92 Console.ReadLine(); 93
最後の方の
c#
1if(!disconnected){ 2 // クライアントにデータを送信する 3 4 // クライアントに送信する文字列を作成 5 string sendMSG = resMSG.Length.ToString(); 6 // 文字列をByte型配列に変換 7 byte[] sendBytes = enc.GetBytes(sendMSG + '\n'); 8 // データを送信する 9 ns.Write(sendBytes, 0, sendBytes.Length); 10 Console.WriteLine("データをクライアントに送信:"+ sendMSG); 11 }
この箇所が接続したときに値を返すメソッドなんだろうなと感じてはいます
アドバイス頂ければ幸いです。
宜しくお願いします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/01 15:04