2017-10-27 10 views
-1

これは初めての投稿です。これはプログラミングには比較的新しいので、これはちょっとした疑問です。「リスナー」という名前は現在のコンテキストには存在しません

基本的に、私はC#でかなり単純な非同期サーバーとクライアントアプリケーションを作成しています。しかし、下のコードからわかるように、私は「名前のリスナーは現在のコンテキストに存在しません」と言われています。

私は公開から非公開に変更しようとしましたが、違いはありません。私はそれがかなり明らかな問題だと確信していますが、誰かが正しい方向に私を指すことができれば、それは非常に高く評価されるでしょう!

ありがとうございます。

using System; 
using System.Text; 
using System.Windows.Forms; 
using System.Net.Sockets; 

namespace Async_Chat_Server 
{ 
    public partial class Form1 : Form 
    { 
     Socket socket; 
     byte[] buffer = new byte[256]; 
     public Form1() 
     { 
      InitializeComponent(); 
      CheckForIllegalCrossThreadCalls = false; 
     } 
     private void StartButton_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       // Listen for input coming from any IP address on specified port 
       int port = int.Parse(PortTextBox.Text); 
       TcpListener listener; 
       listener = new TcpListener(System.Net.IPAddress.Any, port); 
       listener.Start(); 
       // Create an event handler for dealing with incoming connections 
       listener.BeginAcceptTcpClient(
       new AsyncCallback(AcceptIncomingConnection), listener); 
      } 
      catch (Exception ex) 
      { 
       // Update display to show error message 
       DisplayTextBox.Text = "Socket connection error:\n" + ex.ToString(); 
      } 
     } 
     private void AcceptIncomingConnection(IAsyncResult incomingConnection) // CALLBACK 
     { 
      // Accept incoming socket connection 
      socket = listener.EndAcceptSocket(incomingConnection); 
      // Set up an event handler for receiving messages 
      Receive(); 
     } 
     private void StopButton_Click(object sender, EventArgs e) 
     { 
      socket.Close(); 
      listener.Stop(); 
     } 
     private void SendButton_Click(object sender, EventArgs e) 
     { 
      // Prepare message 
      byte[] messageBytes = Encoding.ASCII.GetBytes(MessageTextBox.Text); 
      // Send it 
      socket.BeginSend(messageBytes, 0, messageBytes.Length, 0, 
      new AsyncCallback(TransmitHandler), socket); 
     } 
     private void TransmitHandler(IAsyncResult info) // CALLBACK 
     { 
      int bytesSent = socket.EndSend(info); 
     } 
     private void Receive() 
     { 
      socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, 
      ReceiveHandler, socket); 
     } 
     private void ReceiveHandler(IAsyncResult messageInfo) // CALLBACK 
     { 
      // Read message 
      int numBytesReceived = socket.EndReceive(messageInfo); 
      string message = Encoding.ASCII.GetString(buffer, 0, numBytesReceived); 
      // Update display 
      DisplayTextBox.Text = message; 
      // Reset the event handler for new incoming messages 
      Receive(); 
     } 
    } 
} 

答えて

-1
TcpListener listener; 

方法の外に、このラインを動かします。

public partial class Form1 : Form 
{ 
    Socket socket; 
    TcpListener listener; 
    ... 
} 
関連する問題