[英]C# - System.Net Socket.Listen Backlog
Ok, I have connected to an IP address using the following code: 好的,我已使用以下代码连接到IP地址:
IPAddress myIpAddress = IPAddress.Parse("10.10.15.200");
IPEndPoint ip = new IPEndPoint(myIpAddress, 5001);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(ip);
I now want to listen to the socket. 我现在想听听套接字。 When I type socket.Listen, intellisense says I need to enter a backlog number, what does this mean?
当我键入socket.Listen时,intellisense说我需要输入一个积压编号,这意味着什么?
Also, once I am listening to the socket, how do I capture the content of what I am 'listening' to. 另外,一旦我听了套接字,我该如何捕获我正在“听”的内容。
Thanks 谢谢
John 约翰
you can use BeginAccept to read what arrived to your socket/endpoint. 您可以使用BeginAccept读取到达套接字/端点的内容。
there is a full example on MSDN, here: Socket.BeginAccept Method 在MSDN上有完整的示例,在这里: Socket.BeginAccept方法
// This server waits for a connection and then uses asynchronous operations to
// accept the connection with initial data sent from the client.
// Establish the local endpoint for the socket.
IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
IPAddress ipAddress = ipHostInfo.AddressList[0];
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000);
// Create a TCP/IP socket.
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp );
// Bind the socket to the local endpoint, and listen for incoming connections.
listener.Bind(localEndPoint);
listener.Listen(100);
while (true)
{
// Set the event to nonsignaled state.
allDone.Reset();
// Start an asynchronous socket to listen for connections and receive data from the client.
Console.WriteLine("Waiting for a connection...");
// Accept the connection and receive the first 10 bytes of data.
int receivedDataSize = 10;
listener.BeginAccept(receivedDataSize, new AsyncCallback(AcceptReceiveCallback), listener);
// Wait until a connection is made and processed before continuing.
allDone.WaitOne();
}
}
public static void AcceptReceiveCallback(IAsyncResult ar)
{
// Get the socket that handles the client request.
Socket listener = (Socket) ar.AsyncState;
// End the operation and display the received data on the console.
byte[] Buffer;
int bytesTransferred;
Socket handler = listener.EndAccept(out Buffer, out bytesTransferred, ar);
string stringTransferred = Encoding.ASCII.GetString(Buffer, 0, bytesTransferred);
Console.WriteLine(stringTransferred);
Console.WriteLine("Size of data transferred is {0}", bytesTransferred);
// Create the state object for the asynchronous receive.
StateObject state = new StateObject();
state.workSocket = handler;
handler.BeginReceive( state.buffer, 0, StateObject.BufferSize, 0,
new AsyncCallback(ReadCallback), state);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.