gpt4 book ai didi

c++ - 一个套接字在线程中发送/接收

转载 作者:行者123 更新时间:2023-11-28 02:51:50 26 4
gpt4 key购买 nike

我有一个套接字服务器和一个套接字客户端。客户端只有一个套接字。我必须使用线程在客户端发送/接收数据。

static int sock = -1;
static std::mutex mutex;


void hello(const char* message)
{
std::unique_lock<std::mutex> lock(mutex);
send(sock, message, strlen(message), 0);
char buf[512];
recv(sock, buf, 512, 0);
lock.unlock();
printf("%s\n", "here");
}

void f()
{
for (int i = 0; i < 100; ++i)
hello("hello");
}

int main(int argc, char *argv[])
{
sock = socket(AF_INET, SOCK_STREAM , 0);

...

std::thread th(&f);

th.join();

close(sock);
return 0;
}

发送/接收终止程序。这是什么原因?

最佳答案

可能是因为socket没连接上。

要使用客户端 TCP 套接字,您必须在发送或接收之前在某处connect()它。

要使用服务器 TCP 套接字,您需要另一个套接字,它将调用 bind()listen()accept ()

显然,如果您想发送 "hello" 字符串并取回它,您将需要一对连接的套接字。

您可能对函数 socketpair() 感兴趣,如果在您的平台上可用,它会创建一对已连接的套接字。

关于c++ - 一个套接字在线程中发送/接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22863332/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com