2012-04-09 14 views
2

クライアントからメッセージを送信しようとすると、サーバーはそのメッセージを受信して​​印刷できません。誰も私に次のサーバクライアントアプリケーションのエラーを教えてもらえますか?C#のサーバークライアントアプリケーションのUDPデータグラムコード

2つのWinFormプロジェクトを作成しました.1つはUDPサーバーで、もう1つはUDPクライアントです。

UDPサーバープロジェクトでは、メッセージを表示するrichTextBox1というリッチテキストボックスと、リスニングを開始/停止するbtStartという名前のボタンを含むフォームを作成しました。

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Net; 
using System.Net.Sockets; 
using System.Threading; 

namespace UDPServer 
{ 
public partial class Form1 : Form 
{ 
    delegate void ShowMessageMethod(string msg); 

    UdpClient _server = null; 
    IPEndPoint _client = null; 
    Thread _listenThread = null; 
    private bool _isServerStarted = false; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 
    private void serverMsgBox_Load(object sender, EventArgs e) 
    { 
     this.btStart.Text = "StartServer"; 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 

    } 

    private void btStart_Click(object sender, EventArgs e) 
    { 
     if (_isServerStarted) 
     { 
      Stop(); 
      btStart.Text = "StartServer"; 
     } 
     else 
     { 
      Start(); 
      btStart.Text = "StopServer"; 
     } 

    } 
    private void Start() 
    { 
     //Create the server. 
     IPEndPoint serverEnd = new IPEndPoint(IPAddress.Any, 1234); 
     _server = new UdpClient(serverEnd); 
     ShowMsg("Waiting for a client..."); 
     //Create the client end. 
     _client = new IPEndPoint(IPAddress.Any, 0); 

     //Start listening. 
     Thread listenThread = new Thread(new ThreadStart(Listening)); 
     listenThread.Start(); 
     //Change state to indicate the server starts. 
     _isServerStarted = true; 
    } 

    private void Stop() 
    { 
     try 
     { 
      //Stop listening. 
      listenThread.Join(); 
      ShowMsg("Server stops."); 
      _server.Close(); 
      //Changet state to indicate the server stops. 
      _isServerStarted = false; 
     } 
     catch (Exception excp) 
     { } 
    } 

    private void Listening() 
    { 
     byte[] data; 
     //Listening loop. 
     while (true) 
     { 
      //receieve a message form a client. 
      data = _server.Receive(ref _client); 
      string receivedMsg = Encoding.ASCII.GetString(data, 0, data.Length); 
      //Show the message. 
      this.Invoke(new ShowMessageMethod(ShowMsg), new object[] { "Client:" + receivedMsg }); 
      //Send a response message. 
      data = Encoding.ASCII.GetBytes("Server:" + receivedMsg); 
      _server.Send(data, data.Length, _client); 
      //Sleep for UI to work. 
      Thread.Sleep(500); 
     } 
    } 
    private void ShowMsg(string msg) 
    { 
     this.richTextBox1.Text += msg + "\r\n"; 
    } 
} 
} 

は、UDPクライアントプロジェクトでは、私はまた、入力またはshowメッセージと入力メッセージを送信するためにbtSendという名前のボタンにrichTextBox1という名前のRichTextBoxを含むフォームを作成しました:これは、コードスニペットです。このプロジェクトの複数のインスタンスを実行できます。サーバーは実行中のすべてのクライアントに対処します。これはコードスニペットです:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Net.Sockets; 
using System.Net; 
using System.Threading; 

namespace UDPClient 
{ 
public partial class Form1 : Form 
{ 
    UdpClient _server = null; 
    IPEndPoint _client = null; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 



    private void Form1_Load(object sender, EventArgs e) 
    { 

    } 
    private void serverMsgBox_Load(object sender, EventArgs e) 
    { 
     //Get the server. 
     _server = new UdpClient("127.0.0.1", 16000); 
     //Create a client. 
     _client = new IPEndPoint(IPAddress.Any, 0); 
    } 

    private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     try 
     { 
      _server.Close(); 
     } 
     catch (Exception s) 
     { 
     } 
    } 

    private void btSend_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      //Send the input message. 
      string text = this.richTextBox1.Text; 
      _server.Send(Encoding.ASCII.GetBytes(text), text.Length); 
      //Receive the response message. 
      byte[] data = _server.Receive(ref _client); 
      string msg = Encoding.ASCII.GetString(data, 0, data.Length); 
      //Show the response message. 
      this.richTextBox1.Text = msg; 
     } 
     catch (Exception exp) 
     { 

     } 
    } 

} 
} 

答えて