Событие AppServer.NewRequestReceived не запускается в SuperSocket
Я создал сервер, который просто печатает строку при получении нового запроса:
var server = new AppServer();
if (!server.Setup(2012) || !server.Start()) {
return;
}
server.NewSessionConnected += (session) => Console.WriteLine("new connection");
server.NewRequestReceived += (session, requestInfo) => Console.WriteLine("new request");
Я подключаюсь к нему из netcat:
C: \ Users \ sashoalm> nc localhost 2012 тестовое задание тестовое задание ^C C:\Users\sashoalm>
Это печатает new connection
но никогда не печатает new request
несмотря на то, что набрал 2 строки из netcat. Я знаю, что netcat отправляет текст на сервер каждый раз, когда набирается полная строка (так работает netcat).
Редактировать: я нашел еще один (не очень хорошо сформулированный) вопрос без ответа, который, возможно, задает то же самое - Как отправить данные на сервер с помощью библиотеки суперсокетов, но я не совсем уверен, если это та же проблема. Кажется, парень пытается отправить данные из кода.
Еще один связанный с этим вопрос - C# SuperSocket без протокола. Там говорят о протоколах. Существует ли протокол SuperSocket по умолчанию, если вы его не указали? Это HTTP или что-то еще?
1 ответ
Используя простой клиент ниже, на основе этого примера MSDN
static void Main(string[] args)
{
IPHostEntry ipHostInfo = Dns.Resolve("localhost");
IPAddress ipAddress = ipHostInfo.AddressList[0];
IPEndPoint remoteEP = new IPEndPoint(ipAddress, 2012);
Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sender.Connect(remoteEP);
Console.WriteLine("Socket connected to {0}", sender.RemoteEndPoint.ToString());
List<string> list = new List<string>
{
"Test1\r\n",
"Test2",
"Test3\r\n",
"Test4\r\n",
"Test5\r\n",
"Test6\r\n",
"Test7",
"Test8\r\n",
"Test9\r\n",
};
foreach (string s in list)
sender.Send(Encoding.ASCII.GetBytes(s));
sender.Shutdown(SocketShutdown.Both);
sender.Close();
}
и используя слегка модифицированную версию вашего сервера:
static void Main(string[] args)
{
var server = new AppServer();
if (!server.Setup(2012) || !server.Start())
{
return;
}
server.NewSessionConnected += (session) => Console.WriteLine("new connection");
server.NewRequestReceived += (session, requestInfo) => Console.WriteLine("new request: Key={0}", requestInfo.Key);
Console.WriteLine("Press ENTER to exit....");
Console.ReadLine();
}
показывает эффект использования или нет \r\n
в качестве терминатора для запроса:
Press ENTER to exit.... new connection new request: Key=Test1 new request: Key=Test2Test3 new request: Key=Test4 new request: Key=Test5 new request: Key=Test6 new request: Key=Test7Test8 new request: Key=Test9
Запросы без терминатора объединяются со следующим, пока терминатор не будет найден.