【发布时间】:2017-11-08 03:41:30
【问题描述】:
客户端是跨平台应用程序(android & ios) (C#) 服务器是 Windows。(C++)
我成功连接到服务器但是这个服务器recv函数返回0后严重。但是当我尝试用 c++ 客户端连接服务器时,我没有遇到这个问题。
当客户端关闭时,Recv 函数返回 0,所以我不想做“继续;”如果 recv 返回 0。
我将此客户端代码添加到 Button。单击按钮后,套接字是否关闭?
客户端 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 Started\n");
client = accept(sock, (struct sockaddr*)&from, &fromlen);
printf("Client connected\r\n");
while (true)
{
res = recv(current_client, buf, sizeof(buf), 0); // recv cmds
// multi Thread
Sleep(30);
if (res == 0 || res >= 150)
{
printf("Recv Failed! = %d\n", res);
continue;
}
【问题讨论】:
标签: c# c++ sockets server client