C# 客户端到C++服务器 Tcp 套接字连接错误



Client is Cross Platform Application(android & ios) (C#)服务器是Windows。(C++)

我成功连接到服务器,但在此服务器之后 recv 函数严重返回 0。但是当我尝试将服务器与c ++客户端连接时,我没有得到这个问题。

当客户端关闭 Recv 函数返回 0 时,所以我不想做"继续";如果 recv 返回 0。

我将此客户端代码添加到按钮。单击按钮后,套接字会关闭吗?

客户端 C# 代码:

private static async void ConnectAsTcpClient()
    {
            using (var tcpClient = new TcpClient())
            {
                //Console.WriteLine("[Client] Connecting to server");
                await tcpClient.ConnectAsync("127.0.0.1", 12312);
                Console.WriteLine("[Client] Connected to server");
            }
    }

服务器C++代码:插座袜;

// for our thread
DWORD thread;
WSADATA wsaData;
sockaddr_in server;
// start winsock
int ret = WSAStartup(0x101, &wsaData); // use highest version of winsock avalible
if (ret != 0)
{
    return 0;
}
// fill in winsock struct ... 
server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons(12312); // listen on telnet port 23
                              // create our socket
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == INVALID_SOCKET)
{
    return 0;
}
// bind our socket to a port(port 123) 
if (bind(sock, (sockaddr*)&server, sizeof(server)) != 0)
{
    return 0;
}
// listen for a connection  
if (listen(sock, 5) != 0)
{
    return 0;
}
// socket that we snedzrecv data on
SOCKET client;
sockaddr_in from;
int fromlen = sizeof(from);
printf("Server Startedn");
client = accept(sock, (struct sockaddr*)&from, &fromlen);
printf("Client connectedrn");
while (true)
{
    res = recv(current_client, buf, sizeof(buf), 0); // recv cmds

    // multi Thread
    Sleep(30);
    if (res == 0 || res >= 150)
    {
        printf("Recv Failed! = %dn", res);
        continue;
    }

客户端不写入任何内容,而是让tcpClient对象超出范围,这会断开连接,导致服务器中recv返回0

顺便说一句,您忘记检查recv调用的实际错误(res == SOCKET_ERROR时)。

最新更新