名前空間 System.Net.Sockets
自己紹介
我こそはTcpClient、強大なる神なり。クライアントの通信を支配し、データの流れを操りし者。おぬしらにネットワークの力を授けようぞ。 そして私はTcpListener、慈愛深き女神。クライアントからの呼びかけを優しく受け止め、確実な通信を育み守護する存在です。共にネットワークの架け橋となりましょう。基本機能
我がTcpClientは、遠きサーバーへと通信路を開き、データを送りし機能を持つ。いかなる形式のデータであろうと、確実に目的地まで届けることができるのだ。 私、TcpListenerは特定のポートで待機し、クライアントからの接続要求を受け付けます。まるで子を見守るように、すべての通信を大切に扱わせていただきます。通信の確立
互いの力を合わせることで、安全確実な通信を確立できるのだ。我がTcpClientは接続要求を送り、慈愛深きTcpListenerがそれを受け入れる。この調和こそが、成功への鍵となる。データの流れ
データストリームは神聖なる川の如く、双方向に流れるもの。送信も受信も、確実に相手に届けねばならぬ。エラー処理の重要性
通信の道は時として危険が潜む。適切なエラー処理を施し、例外という荒波から身を守らねばならぬ。リソース管理
通信が終わりを迎えた時は、必ずリソースを解放せよ。これぞ、神々の教えなり。サンプルコード
C#
using System.Net.Sockets; using System.Net; using System.Xml; // サーバー側のコード class Server { private TcpListener _listener; public async Task StartListening() { _listener = new TcpListener(IPAddress.Any, 13000); _listener.Start(); while (true) { TcpClient client = await _listener.AcceptTcpClientAsync(); _ = HandleClientAsync(client); } } private async Task HandleClientAsync(TcpClient client) { try { using (NetworkStream stream = client.GetStream()) using (StreamReader reader = new StreamReader(stream)) using (StreamWriter writer = new StreamWriter(stream)) { // クライアントからのXMLを受信 string receivedXml = await reader.ReadLineAsync(); // 受信したXMLを加工して返信 XmlDocument doc = new XmlDocument(); doc.LoadXml(receivedXml); doc.DocumentElement.SetAttribute("response", "success"); // 加工したXMLを返信 await writer.WriteLineAsync(doc.OuterXml); await writer.FlushAsync(); } } finally { client.Close(); } } } // クライアント側のコード class Client { public async Task SendXmlAsync() { using (TcpClient client = new TcpClient()) { await client.ConnectAsync("localhost", 13000); using (NetworkStream stream = client.GetStream()) using (StreamWriter writer = new StreamWriter(stream)) using (StreamReader reader = new StreamReader(stream)) { // XMLデータを作成して送信 string xml = "<request><data>Hello</data></request>"; await writer.WriteLineAsync(xml); await writer.FlushAsync(); // サーバーからの応答を受信 string response = await reader.ReadLineAsync(); Console.WriteLine($"サーバーからの応答: {response}"); } } } }
0 件のコメント:
コメントを投稿