【问题标题】:I'd like to port simple C++ echo server to C#我想将简单的 C++ 回显服务器移植到 C#
【发布时间】:2009-06-18 03:41:37
【问题描述】:
SOCKET  client  = accept(listen_sock, 0, 0);

timeval client_to;
client_to.tv_sec    = 1;
client_to.tv_usec   = 0;
setsockopt(client, SOL_SOCKET, SO_RCVTIMEO, (char*)&client_to, sizeof(client_to));
char    buffer[1024];
while ((ret = recv(client, buffer, 1024, 0)) != 0)
{
    cout    << "<in loop>" << endl;
    if (ret == -1 && WSAGetLastError() != WSAETIMEDOUT) break;
    if (ret > 0)    cout    << std::string(buffer, 0, ret) << endl;
}

closesocket(client);

以上代码是用 C++ 编写的简单回显服务器的一部分。 我面临的问题是......

  1. 如何设置超时值并检测超时时间是否过期?
  2. 如何检测socket断开连接?

请让我用 C# 显示一些代码。谢谢。

添加>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

我的部分 C# 代码如下...

try
{
    // Read all
    spider.Client.ReceiveTimeout = 500; // spider is TcpClient type and blocking socket.
    int readCount = 0;
    SocketError socketError;
    while ((readCount = spider.Client.Receive(tempBuffer, 0, tempBuffer.Length, SocketFlags.None, out socketError)) > 0) // I  think time-out does not work, Receive() returns immediately.
    {
    recvBuffer.Append(tempBuffer, 0, readCount);
    }
}
catch (Exception e) // even though spider is disconnect, no exception occurred. how can I detect disconnection?
{
    Console.WriteLine("Exception: {0}", e.Message);

}

【问题讨论】:

  • 所以你的问题更多的是“为我写这个”而不是“请帮助写这个”? :) 我建议尝试一下,当您遇到实际的 C# 相关问题时再回来。 .NET 有一个 Socket 类,它的工作方式与任何其他套接字非常相似,只是它是一个类而不是函数和句柄。
  • 我的文章是不是显得不真诚?我已经使用 C# 进行了多次测试,但找不到正确的方法。我不只是问而不做。我知道 C# 的套接字是相似的(我真的希望如此),但要让它像我预期的那样工作并不容易。还是谢谢。
  • 没问题,但是您能否发布您当前的 C# 代码以便我们可以使用它?它使每个人都更容易,因为现在您似乎有两个不同的问题,也许将它们分成两个不同的问题会更好。

标签: c# c++ networking sockets


【解决方案1】:

查看 kodart 为 .net 提供的 XF.Server 套接字库。当您下载该库时,它带有一个回显服务器作为 Xf.Server 库的示例实现。这对你有用。

www.kodart.com

谢谢。

【讨论】:

    猜你喜欢
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    相关资源
    最近更新 更多