RSS

C#: TCP Listener

23 11月

 

 

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace TcpListenerTest2
{
 class Program
 {
 static void Main(string[] args)
 {
 TcpServer server = new TcpServer(11);
 Console.WriteLine("Listening ...");
 server.Listen();
 Console.WriteLine("Closed.");
 }
 }

 class TcpServer
 {
 public int? port1 = null;
 private TcpListener tcpListener1 = null;
 private IPAddress address1 = null;
 private bool flag = false;

 public TcpServer(int port)
 {
 this.port1 = port;
 this.address1 = new IPAddress(new byte[] { 127, 0, 0, 1 });
 this.tcpListener1 = new TcpListener(this.address1, (int)this.port1);
 }

 public void Listen()
 {
 this.tcpListener1.Start();

 while (true)
 {
 TcpClient client = tcpListener1.AcceptTcpClient();    // blocking
 if (flag) { break; }
 Thread thread = new Thread(DoWork);
 thread.Start(client);
 Console.WriteLine("accept");
 }
 }

 private void DoWork(object client)
 {
 byte[] buffer = new byte[4096];
 NetworkStream stream = ((TcpClient)client).GetStream();
 int n = stream.Read(buffer, 0, buffer.Length);
 string data = Encoding.ASCII.GetString(buffer, 0, n);
 Console.WriteLine(data);
 byte[] answer = new byte[] { 0x24, 0x0a };
 stream.Write(answer, 0, answer.Length);
 if (data.ToUpper() == "QUIT\r")
 {
 this.flag = true;
 }
 stream.Close();
 }
 }
}

 
コメントする

投稿者: : 2010/11/23 投稿先 C#

 

タグ: , , ,

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中