我有一个套接字服务器和一个套接字客户端。客户端只有一个套接字。我必须使用线程在客户端发送/接收数据。
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;
}
发送/接收终止程序。原因是什么?
答案 0 :(得分:2)
可能因为套接字未连接。
要使用客户端TCP套接字,您必须在发送或接收之前将其connect()
放在某处。
要使用服务器TCP套接字,您需要另一个套接字,它将调用bind()
,listen()
和accept()
。
显然,如果您想发送"hello"
字符串并将其取回,则需要一对连接的套接字。
您可能对您的平台上的函数socketpair()
感兴趣,该函数会创建一对已连接的套接字。