客户端有时可以从套接字读取消息但有时无法读取相同的消息

时间:2014-04-05 18:29:42

标签: c++ sockets

下面的代码是客户端,服务器端是二进制格式,因此无法修改服务器端。我只能修改客户端。客户端和服务器分别向对方发送消息。

我从http://www.tutorialspoint.com/unix_sockets/socket_server_example.htm获取示例代码并稍作修改。它可以编译。当多个客户端连接到服务器时,在某些情况下客户端可以从套接字读取,但是,在某些情况下客户端无法读取来自socket。换句话说,在行

n = read(sockfd,buffer_reader,255);

此时正在运行并且正在运行     它正在等待,没有给出任何错误。我找不到任何理由     虽然在两种情况下都有时起作用,但它有时不起作用     将由服务器发送的消息是相同的。我找不到任何东西     导致这个问题,所以无法产生任何解决方案  这是代码。可能是什么问题?什么可能导致这个问题?

#include <string.h>
#include <cstring>
#include <unistd.h>
#include <stdio.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <iostream>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <strings.h>
#include <stdlib.h>
#include <string>
#include <time.h>
#include <vector>

void error(const char *msg)
{
perror(msg);
exit(0);
}


int main(int argc, char *argv[])
{
u sing namespace std;
    int sockfd, portno, n;
    struct sockaddr_in serv_addr;
    struct hostent *server;

    unsigned char hash[20];
    int src[2] ;
    char buffer[256];

if (argc < 3) {
        fprintf(stderr,"usage %s hostname port\n", argv[0]);
        exit(0);
    }

portno = atoi(argv[3]); 
sockfd = socket(AF_INET, SOCK_STREAM, 0);

if (sockfd < 0) 
    error("ERROR opening socket");
server = gethostbyname(argv[2]);

if (server == NULL) {
    fprintf(stderr,"ERROR, no such host\n");
    exit(0);
}

    bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;  //classic

    bcopy((char *)server-> h_addr,
    (char *)&serv_addr.sin_addr.s_addr, server->h_length  );
        serv_addr.sin_port = htons(portno);

    if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) 
    error("ERROR connecting");

while(1)
{
    printf("Please enter the message: ");
    bzero(buffer_reader,256);   
    fgets(buffer_reader,255,stdin); 
    n = write(sockfd,buffer_reader,strlen(buffer_reader)); 
    if (n < 0) 
     error("ERROR writing to socket");

    bzero(buffer_reader,256); 

    n = read(sockfd,buffer_reader,255);  //problem arise here. Stacked here
    if (n < 0) 
     error("ERROR writing to socket");
    printf("The incoming message: %s",buffer_reader);
}
close(sockfd);
return 0;
}

0 个答案:

没有答案