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

时间:2014-04-04 12:49:51

标签: c++ multithreading

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

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;
}

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

1 个答案:

答案 0 :(得分:2)

可能因为套接字未连接。

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

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

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

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