1

我创建了一个服务器,只要收到新请求就打印一行:

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 本地主机 2012
测试
测试
^C
C:\用户\sashoalm>

尽管从 netcat 输入了 2 行,但它打印new connection但从不打印。new request我知道每次输入一整行时,netcat 都会将文本发送到服务器(这就是 netcat 的工作方式)。

编辑:我发现另一个(措辞不是很好)未回答的问题可能会问同样的问题 - How to send data to server using supersocket library,但我不完全确定它是否是同一个问题。那里的人似乎试图从代码中发送数据。

另一个相关问题 - C# SuperSocket without protocol。他们在那里谈论协议。当您未指定时,SuperSocket 中是否有默认协议?是HTTP还是其他?

4

1 回答 1

2

使用下面的简单客户端,基于此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

没有终止符的请求与下一个请求连接,直到找到终止符。

于 2016-08-17T13:35:59.247 回答