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