【发布时间】: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#