如何在 c++ 中确定 tcp 客户端是否连接
How to determine tcp client is connect or not in c++
我保存了连接的客户端/套接字的所有IP,之后我想知道何时从服务器到客户端写入内容,无论客户端是否处于CONNECT状态。当我使用Write
函数时,可以将数据从服务器发送到丢弃的客户端,因为一个或多个客户端可能会断开连接,连接将被关闭并且数据不会发送。我的代码是:
void *connection_determine(void *ptr){
while (1) {
putchar(x[0]);
std::list<int>::iterator it;
it=list_client_sockets.begin();
while (it!=list_client_sockets.end()){
printf("%dt",*it);
if (read(*it, x, 1) < 1) {
cout<<"yes"<<endl;
perror("Error on write to client socket!rn");
fflush(stdout);
fflush(stderr);
close(*it);
it=list_client_sockets.erase(it);
--it;
//return 0;
}
it++;
}
//printf("0x%02X ",x);
fflush(stdout);
}
}
// function for read data from pipe and send it to clients
void *pipeRead_thread_func(void *ptr) {
int fd_pipe = *((int *) ptr);
while (1) {
char x[1];
if (read(fd_pipe, x, 1) < 0) {
perror("Read Error");
return 0;
}
putchar(x[0]);
std::list<int>::iterator it;
it=list_client_sockets.begin();
while (it!=list_client_sockets.end()){
printf("%dt",*it);
if (send(*it, x, 1,0) < 0) {
cout<<"yes"<<endl;
perror("Error on write to client socket!rn");
fflush(stdout);
fflush(stderr);
close(*it);
it=list_client_sockets.erase(it);
--it;
//return 0;
}
it++;
}
//printf("0x%02X ",x);
fflush(stdout);
}
}
客户端决定是否关闭连接的通常方法是检查它是否已超时,如果它在指定的时间内没有收到任何消息,则关闭套接字。 您可以通过尝试从套接字读取来检测套接字是否打开,如果套接字失败,套接字将关闭。 您可以使用"保持活动状态"消息使套接字保持打开状态。 您可以使用单独的线程进行套接字状态检测和/或保持套接字处于活动状态。
相关文章:
- 如何在 c++ 中确定 tcp 客户端是否连接
- TCP C++客户端从C#服务器接收字节数组
- 提升TCP客户端接收崩溃
- Qt TCP客户端无法显示收到的图像
- 无法使用C#TCP服务器和C TCP客户端接收消息
- 为C 服务器实施Java TCP客户端
- C 设计:多个TCP客户端,Boost ASIO和观察者
- TCP 客户端服务器程序
- TCP客户端可以使用相同的端口到其他服务器
- C++ - 程序在尝试在 TCP 客户端上连接到不存在的地址时表现出奇怪的行为
- 如何将 streamsocket 用作 POCO 库中的非阻塞 TCP 客户端
- 具有多个从ID的Modbus TCP客户端服务器
- 如何在 tcp 客户端模式下固定接收端口
- 加速和 Windows 套接字 - 正确处理 TCP 客户端断开连接方案
- 提升异步 TCP 客户端在没有物理连接的情况下写入时不返回错误
- 提升连接后从TCP服务器访问TCP客户端IP地址+端口
- 将TCP客户端(在Linux / C ++上)连接到TCP服务器(在Windows C#上)
- 如何在一台本地计算机/主机上对简单的 TCP 客户端/服务器进行单元测试
- 向我的 TCP 客户端/服务器应用添加加密层的最直接方法是什么?
- 最简单的QT TCP客户端