【问题标题】:The name 'listener' does not exist in the current context [duplicate]当前上下文中不存在名称“侦听器”[重复]
【发布时间】:2018-04-08 20:04:30
【问题描述】:

这是我第一次在这里发帖,而且我对编程比较陌生,所以如果这是一个有点愚蠢的问题,我深表歉意。

基本上,我正在用 C# 创建相当简单的异步服务器和客户端应用程序。但是,正如您从下面的代码中看到的那样,我被告知“名称'listener' 在当前上下文中不存在。”

我尝试将私有更改为公共,但这没有任何区别。我敢肯定这是一个非常明显的问题,但如果有人能指出我正确的方向,将不胜感激!

提前致谢。

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();
        }
    }
}

【问题讨论】:

    标签: c#


    【解决方案1】:
     TcpListener listener;
    

    将此行移到方法之外。

    public partial class Form1 : Form
    {
        Socket socket;
        TcpListener listener;
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-02
      • 2014-04-22
      • 2017-06-17
      • 2015-09-11
      • 1970-01-01
      相关资源
      最近更新 更多