TcpListener に基づく単純な TCP サーバーがあります。Windowsフォームアプリケーションで使用したいので、次のように別のスレッドで実行しました:
public void Start() {
this.serverThread = new Thread(new ThreadStart(this.ThreadProcess));
this.serverThread.Name = "Tcp-Server";
this.serverThread.Start();
}
protected void ThreadProcess() {
try
{
IPAddress ipAd = IPAddress.Parse("169.254.42.86");
this.listener = new TcpListener(ipAd, this.port);
this.listener.Start();
Socket mySocket = this.listener.AcceptSocket();
while (true)
{
if (mySocket.Connected)
{
byte[] RecvBytes = new byte[8192];
int byteNo = mySocket.Receive(RecvBytes, RecvBytes.Length, 0);
ASCIIEncoding asen = new ASCIIEncoding();
mySocket.Send(asen.GetBytes("srv reply msg"));
}
else
{
WriteLine("socket not connected.");
}
}
}
finally {
StopListener();
}
}
このサーバーをコンソール アプリケーションで次のように使用する場合:
static void Main(string[] args)
{
try
{
int port = 8001;
Server server = new Server(port);
server.Start();
while (true) {
//server is running in separate thread
}
...
すべてが期待どおりに機能します。ただし、ボタンがクリックされたときにサーバーを起動する Windows フォーム アプリケーションにそれを含めようとすると、コードが機能しなくなります。サーバー スレッドが起動されていますが、ソケットを受け入れません。私が見逃しているものはありますか?私は結果なしでグーグルで高低を検索してきました...助けてくれてありがとう!