C++;自动建立套接字连接? 我现在正在编程一个C++模块,它创建一个Socket服务器线程,它每1ms轮询一个Actuple()函数。我有一个测试模块,它可以伪造也在运行的客户端连接。测试模块启动服务器线程的创建。创建并验证线程是否正在运行后,客户端将运行connect()命令作为测试。我的代码声明已建立连接,并在connect命令上返回0。但是,在我的服务器线程中运行的accept()从未收到连接

C++;自动建立套接字连接? 我现在正在编程一个C++模块,它创建一个Socket服务器线程,它每1ms轮询一个Actuple()函数。我有一个测试模块,它可以伪造也在运行的客户端连接。测试模块启动服务器线程的创建。创建并验证线程是否正在运行后,客户端将运行connect()命令作为测试。我的代码声明已建立连接,并在connect命令上返回0。但是,在我的服务器线程中运行的accept()从未收到连接,c++,linux,sockets,C++,Linux,Sockets,服务器绑定接受任何IP:50000,而客户端未绑定,但将127.0.0.1:50000设置为其目标。我的Linux环境是否自动接受此连接 以下是我的服务器套接字的代码: int nSocket; int nOn = 1; int nControl; struct sockaddr_in sServerAddress; nSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); if(nSocket < 0) { std::cout

服务器绑定接受任何IP:50000,而客户端未绑定,但将127.0.0.1:50000设置为其目标。我的Linux环境是否自动接受此连接

以下是我的服务器套接字的代码:

int nSocket;
int nOn = 1;
int nControl;
struct sockaddr_in  sServerAddress;

nSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if(nSocket < 0)
{
    std::cout << "Failed to create socket\n";
}
if(setsockopt(nSocket, SOL_SOCKET, SO_REUSEADDR, &nOn, sizeof(int)) < 0)
{
    std::cout << "failed to set socket option\n";
}
nControl = fcntl(nSocket, F_GETFL);
if(fcntl(nSocket, F_SETFL, O_NONBLOCK | nControl) < 0)
{
    std::cout << "set not blocking failed\n";
}

memset(&sServerAddress, 0x00, sizeof(struct sockaddr_in));
sServerAddress.sin_family = AF_INET;
sServerAddress.sin_addr.s_addr = htonl(INADDR_ANY);
sServerAddress.sin_port = htons(mtListenPort);

if(bind(nSocket, (struct sockaddr*)&sServerAddress, sizeof(struct sockaddr_in)) < 0)
{
    std::cout << errno << "bind failed\n";
}

if(listen(nSocket, MAXPENDING) < 0)
{
    std::cout << "listen failed\n";
}
int nSocket;

nSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if(nSocket < 0)
{
    std::cout << "Failed to create socket\n";
}

struct sockaddr_in serverAddress;
serverAddress.sin_family = AF_INET;
inet_aton(LOCAL_HOST, &serverAddress.sin_addr);
serverAddress.sin_port = htons(LISTEN_PORT00);
char msg[] = "Hello World.";

usleep(10000);

if (connect(nSocket, (struct sockaddr *) &serverAddress, sizeof(serverAddress)) < 0)
{
    std::cout << errno << "Could not connect to the server.\n";
}

usleep(10000);

if (sendto(nSocket, msg, strlen(msg), 0, (struct sockaddr *) &serverAddress, sizeof(serverAddress)) < 0)
{
    std::cout << errno << "Could not send data to the server.\n";
}
intnsocket;
int非=1;
内控;
sServerAddress中的结构sockaddr_;
nSocket=套接字(PF_INET、SOCK_STREAM、IPPROTO_TCP);
如果(nSocket<0)
{

std::cout您使用的是
sendto
?这是UDP…使用
send

另外,检查端口是否空闲:

telnet localhost 50000

netstat -a

您正在使用
sendto
?这是用于UDP的…使用
send

另外,检查端口是否空闲:

telnet localhost 50000

netstat -a

在调用
accept()
之前,请确保将
tclientaddrllength
初始化为
sizeof sClientAddr
。这是一个常见错误


不要默默地忽略错误。请检查
errno
中的错误代码,因为它会告诉您出了什么问题。

在调用
accept()
之前,确保
tclientaddrllength
初始化为
sizeof sClientAddr
。这是一个常见错误


不要默默地忽略错误。检查
errno
中的错误代码,因为它会告诉您出了什么问题。

您在哪里调用
accept()
?哦,我的错误。我正在线程中运行的循环中调用它。我将更新代码。不要每1ms轮询一次!你到底在做什么?使用阻止套接字或选择!你没有显示完整的代码。在调用
accept()之前,确保
tClientAddrLength
已初始化为
sizeof sClientAddr
。这是一个常见的错误。是的,我对套接字非常陌生。我的代码是基于一位同事与我分享的一个示例编写的。我相信他的推理是为了让我们可以接受多个连接。但这没有真正的意义。你在哪里调用
accept()
?哦,我的错误。我正在线程中运行的循环中调用它。我将更新代码。不要每1ms轮询一次!你到底在做什么?使用阻止套接字或选择!你没有显示完整的代码。在调用
accept()之前,确保
tClientAddrLength
已初始化为
sizeof sClientAddr
。这是一个常见的错误。是的,我对套接字非常陌生。我的代码是基于一位同事与我分享的一个示例编写的。我相信他的推理是为了让我们可以接受多个连接。但这并没有真正意义。