我正在编写一个 C/C++ 客户端/服务器套接字应用程序。此时,客户端每 50 毫秒连接一次服务器并发送一条消息。
一切似乎都正常,但数据流并不连续:突然,服务器不再收到任何消息,然后一次收到 5 条消息......有时一切正常......
有人知道这种奇怪行为的起源吗?
部分代码:
Client:
while (true)
{
if (SDL_GetTicks()-time>=50)
{
socket = new socket();
socket->write("blah");
message.clear();
message = socket->read();
socket->close();
delete socket;
time=SDL_GetTicks();
}
}
Server:
while (true) {
fd_set readfs;
struct timeval timeout={0,0};
FD_ZERO(&readfs);
FD_SET(sock, &readfs);
select(sock + 1, &readfs, NULL, NULL, &timeout)
if(FD_ISSET(sock, &readfs))
{
SOCKADDR_IN csin;
socklen_t crecsize = sizeof csin;
SOCKET csock = accept(sock, (SOCKADDR *) &csin, &crecsize);
sock_err = send(csock, buffer, 32, 0);
closesocket(csock);
}
}
Edits:
1. I tried to do
int flag = 1;
setsockopt(socket, IPPROTO_TCP, TCP_NODELAY, &flag, sizeof flag);
在客户端和服务器端,但问题仍然存在。
2.是的,这些连接/断开连接效率非常低,但是当我尝试编写时
socket = new socket();
while (true)
{
if (SDL_GetTicks()-time>=50)
{
socket->write("blah");
message.clear();
message = socket->read();
time=SDL_GetTicks();
}
}
那么消息只发送一次(或接收)......