线程中一个套接字发送/接收
one socket send/receive in thread
我有一个套接字服务器和一个套接字客户端。客户端只有一个套接字。我必须使用线程在客户端中发送/接收数据。
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()
,如果您的平台上可用,它会创建一对已经连接的套接字。
相关文章:
- 节点.js HTTP 无法通过套接字接收来自C++客户端的请求
- 如何知道请求是否完全使用 TCP 套接字接收?
- FFmpeg:解码从UDP套接字接收的AVPackets
- 通过套接字接收 jpeg,但无法在 Qt 上显示
- Windows 套接字接收标志
- 写入套接字接收的进程字符串的输入
- 通过c++中的套接字接收二进制数据
- 如何停止从套接字 C/C++ 接收数据
- 从套接字接收到二进制数据后,使用c++将二进制数据写入文件
- 从已关闭的套接字接收数据
- 套接字接收流在接收 FIN 数据包时是否会关闭
- 伯克利套接字:接收系统调用
- Asio UDP 套接字接收失败
- C++中的多线程,从套接字接收消息
- C++套接字接收混合消息
- 通过Linux套接字接收多个主机的数据
- 从安卓客户端发送数据时,C++ 套接字接收函数中第一个字符中的 NUL 值
- 内部套接字接收缓冲区实现
- 使用boost::asio套接字接收错误数据
- 零MQ套接字接收挂起