线程中一个套接字发送/接收

one socket send/receive in thread

本文关键字:套接字 接收 一个 线程      更新时间:2023-10-16

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

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("%sn", "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;
}

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

可能是因为插座未连接。

要使用客户端 TCP 套接字,您必须在发送或接收之前将其connect()某个位置。

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

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

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