多个端口服务器没有获得所有传输

时间:2011-10-04 11:26:29

标签: c linux sockets

我在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");
            }
}

但是当我向服务器发送消息时(通过连接到所有套接字的客户端),一些消息会丢失,当我从不同的客户端连接到服务器时,这种方式非常有效。

1 个答案:

答案 0 :(得分:0)

TCP没有消息,因此可以在一个read()中获得多个“消息”。 尝试检查read()调用的结果(n)。 您可以使用

检查缓冲区
printf("read(%d): %*.*s\n", n, n, n , buffer);