我在linux下用c写了一个单线程服务器, 这个服务器监听多个端口,服务器应该收到短信, 我使用此代码来收听套接字:
while(1){
FD_ZERO(&socks);
for (i = 0 ; i < IndexConnctedSocket ; i++ )
FD_SET(newSocketFds[i],&socks);
readsocks = select(highNewSocket + 1,&socks,(fd_set*) 0,
(fd_set*) 0 ,&timeout);
for (j = 0 ; j <= index ; j++ ){
if ( FD_ISSET(newSocketFds[j],&socks) != 0 ){
bzero(buffer, 2048);
n = read(newSocketFds[j], buffer, 2048);
if (n < 0)
error("ERROR reading from socket");
i = 0;
n = write(newSocketFds[j], "I got your message ",18);
if (n < 0)
error("ERROR writing to socket");
}
}
但是当我向服务器发送消息时(通过连接到所有套接字的客户端),一些消息会丢失,当我从不同的客户端连接到服务器时,这种方式非常有效。
答案 0 :(得分:0)
TCP没有消息,因此可以在一个read()中获得多个“消息”。 尝试检查read()调用的结果(n)。 您可以使用
检查缓冲区printf("read(%d): %*.*s\n", n, n, n , buffer);