서버가 파일에서 데이터를 읽기 위해 클라이언트 측에서 연결을 수락하지 않습니다.

차 치료

Linux의 클라이언트 응용 프로그램에서 서버의 파일을 읽고 싶습니다. 내 서버 및 클라이언트 응용 프로그램 아래에 언급했습니다.

클라이언트 측에서 파일을 엽니 다 (내 요구 사항에 필요함). 클라이언트는 내가 파일에 기록한 데이터를받습니다. 이제 클라이언트에서받은 데이터를 서버 측으로 보내고 에코를 클라이언트로 되돌리고 싶습니다.

클라이언트 연결을 수락하는 서버에 문제가 있습니다. 내가 정확히 실수 한 해결책이있어서 기쁘다. 코드에 대한 해결책을 얻으면 감사합니다. 미리 감사드립니다.

Server.C

#include<stdio.h>

#define BufferLength 100

/* Server port number */
#define SERVPORT 3389

int main(int argc, char *argv[])
{

/* Variable and structure definitions. */
int sd, sd2, rc, length = sizeof(int);
int totalcnt = 0, on = 1;
char temp;
char buffer[BufferLength];
//char data[BufferLength];
struct sockaddr_in serveraddr;
struct sockaddr_in their_addr;

fd_set read_fd;
struct timeval timeout;
timeout.tv_sec = 15;
timeout.tv_usec = 0;

/*To read xillybus*/
//  FILE *fp;
//  fp = fopen("/dev/xillybus_read_8", "r");
//  if(fp==NULL)
//  {
//      printf("Error file open\n");
//      exit(-1);
//  }
//  else{
//      printf("File found %s\n", fp);
//  }


/* Get a socket descriptor */

if((sd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
    perror("Server-socket() error");
    exit (-1);
}
else
{
    printf("Server-socket() is OK\n");
}


/* Allow socket descriptor to be reusable */

if((rc = setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on))) < 0)
{
    perror("Server-setsockopt() error");
    close(sd);
    exit (-1);
}
else
{
    printf("Server-setsockopt() is OK\n");
}

/* bind to an address */
memset(&serveraddr, 0x00, sizeof(struct sockaddr_in));
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(SERVPORT);
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
printf("Using %s, listening at %d\n", inet_ntoa(serveraddr.sin_addr), SERVPORT);



if((rc = bind(sd, (struct sockaddr *)&serveraddr, sizeof(serveraddr))) < 0)
{
    perror("Server-bind() error");
    close(sd);
    exit(-1);
}

else
{
    printf("Server-bind() is OK\n");
}



/* Up to 10 clients can be queued */

if((rc = listen(sd, 10)) < 0)
{
    perror("Server-listen() error");
    close(sd);
    exit (-1);
}
else
{
    printf("Server-Ready for client connection...\n");
}


/* accept() the incoming connection request. */

int sin_size = sizeof(struct sockaddr_in);


if((sd2 = accept(sd, (struct sockaddr *)&their_addr, &sin_size)) < 0)
{

    perror("Server-accept() error");
    close(sd);
    exit (-1);
}
else
{

    printf("Server-accept() is OK\n");
}

/*client IP*/
    printf("Server-new socket, sd2 is OK...\n");
    printf("Got connection from the  client: %s\n", inet_ntoa(their_addr.sin_addr));

/* Wait for up to 15 seconds on */
/* select() for data to be read. */
FD_ZERO(&read_fd);
FD_SET(sd2, &read_fd);
rc = select(sd2+1, &read_fd, NULL, NULL, &timeout);

if((rc == 1) && (FD_ISSET(sd2, &read_fd)))
{
/* Read data from the client. */
totalcnt = 0;

while(totalcnt < BufferLength)
{


/* read() from client */
rc = read(sd2, &buffer[totalcnt], (BufferLength - totalcnt));
if(rc < 0)
{
    perror("Server-read() error");
    close(sd);
    close(sd2);
    exit (-1);
}

else if (rc == 0)
{
    printf("Client program has issued a close()\n");
    close(sd);
    close(sd2);
    exit(-1);
}

else
{
    totalcnt += rc;
    printf("Server-read() is OK\n");
}

}
}
else if (rc < 0)
{
    perror("Server-select() error");
    close(sd);
    close(sd2);
    exit(-1);
}

/* rc == 0 */
else
{
    printf("Server-select() timed out.\n");
    close(sd);
    close(sd2);
    exit(-1);
}

/* Shows the data */
    printf("Received data from the client: %s\n", buffer);
    printf("Server-Echoing back to client...\n");

/*Write function*/
rc = write(sd2, buffer, totalcnt);
if(rc != totalcnt)
{
    perror("Server-write() error");
    rc = getsockopt(sd2, SOL_SOCKET, SO_ERROR, &temp, &length);

if(rc == 0)
{
    /* Print out the asynchronously */
    /* received error. */
    errno = temp;
    perror("SO_ERROR was: ");
}
else
{
    printf("Server-write() is OK\n");
}
close(sd);
close(sd2);
exit(-1);
}


/******************************************/
close(sd2);
close(sd);
exit(0);
return 0;
}

Client.c

#include<stdio.h>

#define BufferLength 100

#define SERVER "00.00.00.00"
/* Server's port number */

#define SERVPORT 3389

/* set the server name in the #define SERVER ... */

int main(int argc, char *argv[])
{
/* Variable and structure definitions. */
int sd, rc, length = sizeof(int);
struct sockaddr_in serveraddr;
char buffer[BufferLength];
char server[255];
char temp;
int totalcnt = 0;
struct hostent *hostp;

//char data[500] = "Hello ravi !!! "; // writes data to the server


/*To open directory and read the xillybus*/

FILE *fp;
char s[100];
fp = fopen("/dev/xillybus_read_8", "r");
if(!fp)
    return 1;
while(fgets(s,100,fp)!=NULL){
    printf("%s ", s);
}
//fclose(fp);

/******************************************/
/* get a socket descriptor */

if((sd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
    perror("Client-socket() error");
    exit(-1);
}
else
{
    printf("Client-socket() OK\n");
}
/*If the server hostname is supplied*/
if(argc > 1)
{
/*Use the supplied argument*/
    strcpy(server, argv[1]);
    printf("Connecting to the server %s, port %d ...\n", server, SERVPORT);
}
else
{
/*Use the default server name or IP*/
strcpy(server, SERVER);
memset(&serveraddr, 0x00, sizeof(struct sockaddr_in));
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(SERVPORT);
}

if((serveraddr.sin_addr.s_addr = inet_addr(server)) == (unsigned long)INADDR_NONE)
{

/* get host address */
hostp = gethostbyname(server);
if(hostp == (struct hostent *)NULL)
{
    printf("HOST NOT FOUND --> ");
/* h_errno is usually defined */
/* in netdb.h */
    printf("h_errno = %d\n",h_errno);
    printf("---This is a client program---\n");
    printf("Command usage: %s <server name or IP>\n", argv[0]);
    close(sd);
    exit(-1);
}
memcpy(&serveraddr.sin_addr, hostp->h_addr, sizeof(serveraddr.sin_addr));
}


/* connect() to server. */

if((rc = connect(sd, (struct sockaddr *)&serveraddr, sizeof(serveraddr))) < 0)
{
    perror("Client-connect() error");
    close(sd);
    exit(-1);
}
else
{
    printf("Connection established...\n");
    printf("Sending some string to the server %s...\n", server);
}
/* Write() some string to the server. */
//rc = write(sd, data, sizeof(data));

rc = write(sd,fp, sizeof(fp)); // here is my write function

if(rc < 0)
{
    perror("Client-write() error");
    rc = getsockopt(sd, SOL_SOCKET, SO_ERROR, &temp, &length);
if(rc == 0)
{
/* Print out the asynchronously received error. */
    errno = temp;
    perror("SO_ERROR was");
}
close(sd);
exit(-1);
}
else
{
    printf("Client-write() is OK\n");
    printf("String successfully sent \n");
    printf("Waiting the %s to echo back...\n", server);
}
totalcnt = 0;

/* Read data from the server. */
while(totalcnt < BufferLength)
{
rc = read(sd, &buffer[totalcnt], BufferLength-totalcnt); //&buffer[totalcnt],BufferLength-totalcnt
if(rc < 0)
{
    perror("Client-read() error");
    close(sd);
    exit(-1);
}
else if (rc == 0)
{
    printf("Server program has issued a close()\n");
    close(sd);
    exit(-1);
}
else
{
    totalcnt += rc;
}
}
    printf("Client-read() is OK\n");
    printf("Echoed data from the  server: %s\n", buffer); //data ->buffer

/* Close socket descriptor from client side. */
close(sd);
exit(0);
return 0;
}
Serge Ballesta

client.c 프로그램에서 a FILE*를 서버 로 보내려고 합니다. 당신이 보내는 것은 파일에 포함 된 텍스트가 아니라 클라이언트 프로그램의 파일 설명 자의 주소입니다 .

4 바이트 또는 8 바이트 (아키텍처 32 또는 64 비트에 따라 다름) 만 보내지 만 서버는 아무것도 에코하기 전에 최소 100 바이트를 기다립니다. 따라서 두 프로그램 모두 사용자가 프로그래밍 한 작업을 수행하지만 예상 한 작업은 수행하지 않습니다.

파일의 내용을 보내려면 char 배열의 파일을 읽고 char 배열을 보냅니다. 한 번에 하나의 버퍼를 읽고 버퍼를 보내는 파일을 반복 할 수 있습니다. 그러나 전체 파일을 보낼 수있는 마법은 없습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

서버가 파일에서 데이터를 읽기 위해 클라이언트 측에서 연결을 수락하지 않습니다.

분류에서Dev

서버가 새 연결을 수락하지 않고 백 로그 크기가 0 인 경우에도 Python 클라이언트 소켓이 연결됩니다.

분류에서Dev

서버의 accept () 함수가 클라이언트의 새 연결을 수락하지 않는 것 같습니다.

분류에서Dev

클라우드 함수는 파일을 읽지 만 클라이언트 측에서 콘텐츠를 반환하지 않습니다.

분류에서Dev

서버가 Let 's Encrypt 's Certbot의 도메인을 확인하기 위해 클라이언트에 연결할 수 없습니다.

분류에서Dev

클라이언트를 서버에 연결하고 C #에서 텍스트 파일을 가져옵니다.

분류에서Dev

클라이언트 측에서 서버 통신을 위해 웹 소켓을 사용하고 싶습니다.

분류에서Dev

클라이언트 측에서 파일을 열고, 만들고, 데이터를 저장하고, 해당 데이터를 재사용합니다.

분류에서Dev

GRPC 서버 스트리밍은 Cloud Run (완전 관리 형)에서 초기 클라이언트 연결 해제를 지원하지 않습니다.

분류에서Dev

Spring Cloud Config : 클라이언트가 구성 서버에 연결을 시도하지 않습니다.

분류에서Dev

C #의 단순 소켓 서버가 클라이언트에 데이터를 쓰려고 할 때 예기치 않게 연결을 닫습니다.

분류에서Dev

네트워크에 저장하기 위해 클라이언트 측에서 scss 컴파일

분류에서Dev

OpenVPN 클라이언트가 실행 중일 때 홈 서버가 인터넷 연결을 수락하고 응답하려면 어떻게해야합니까?

분류에서Dev

OpenVPN 클라이언트가 실행 중일 때 홈 서버가 인터넷 연결을 수락하고 응답하려면 어떻게해야합니까?

분류에서Dev

파이프에서 입력 수락을 중지하지만 버퍼링 된 데이터를 읽습니다.

분류에서Dev

파이프에서 입력 수락을 중지하지만 버퍼링 된 데이터를 읽습니다.

분류에서Dev

자체적으로 데이터에 대해 일종의 작업을 수행하기 위해 서버 측에서 PHP를 만드는 방법이 있습니까?

분류에서Dev

클라이언트 측에서 .Net Core 컨트롤러가 반환 한 JSON을 읽을 수 없습니다.

분류에서Dev

Windows Azure-전송 연결에서 데이터를 읽을 수 없음 : 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

분류에서Dev

TcpListener + TcpClient-닫기 전에 클라이언트가 데이터를 읽을 때까지 기다립니다.

분류에서Dev

동일한 컴퓨터의 OpenVPN 클라이언트 및 서버-클라이언트가 연결되어있을 때 서버에서 연결을 허용하지 않습니다.

분류에서Dev

클라이언트가 netty에서 연결 해제되었는지 확인하기위한 TCP 연결 유지

분류에서Dev

C ++ 서버가 클라이언트 / Winsock에서 데이터를받을 수 없습니다.

분류에서Dev

일부 클라이언트에서만 "425 데이터 연결을 열 수 없습니다"

분류에서Dev

WCF 클라이언트가 오류로 인해 WCF 서버에 연결할 수 없습니다.

분류에서Dev

파이썬 메서드를 호출해도 jinja2를 사용하는 클라이언트 측에는 영향을 미치지 않습니다.

분류에서Dev

TCP 클라이언트가 TCP 서버에 연결할 수 없습니다.

분류에서Dev

Blazor 클라이언트 측 (WebAssembly)은 startup.cs에서 json 파일을 읽습니다.

분류에서Dev

Vuetify : 서버 측 페이지를 매긴 데이터 테이블이 클라이언트 측을 정렬하지 않습니다.

Related 관련 기사

  1. 1

    서버가 파일에서 데이터를 읽기 위해 클라이언트 측에서 연결을 수락하지 않습니다.

  2. 2

    서버가 새 연결을 수락하지 않고 백 로그 크기가 0 인 경우에도 Python 클라이언트 소켓이 연결됩니다.

  3. 3

    서버의 accept () 함수가 클라이언트의 새 연결을 수락하지 않는 것 같습니다.

  4. 4

    클라우드 함수는 파일을 읽지 만 클라이언트 측에서 콘텐츠를 반환하지 않습니다.

  5. 5

    서버가 Let 's Encrypt 's Certbot의 도메인을 확인하기 위해 클라이언트에 연결할 수 없습니다.

  6. 6

    클라이언트를 서버에 연결하고 C #에서 텍스트 파일을 가져옵니다.

  7. 7

    클라이언트 측에서 서버 통신을 위해 웹 소켓을 사용하고 싶습니다.

  8. 8

    클라이언트 측에서 파일을 열고, 만들고, 데이터를 저장하고, 해당 데이터를 재사용합니다.

  9. 9

    GRPC 서버 스트리밍은 Cloud Run (완전 관리 형)에서 초기 클라이언트 연결 해제를 지원하지 않습니다.

  10. 10

    Spring Cloud Config : 클라이언트가 구성 서버에 연결을 시도하지 않습니다.

  11. 11

    C #의 단순 소켓 서버가 클라이언트에 데이터를 쓰려고 할 때 예기치 않게 연결을 닫습니다.

  12. 12

    네트워크에 저장하기 위해 클라이언트 측에서 scss 컴파일

  13. 13

    OpenVPN 클라이언트가 실행 중일 때 홈 서버가 인터넷 연결을 수락하고 응답하려면 어떻게해야합니까?

  14. 14

    OpenVPN 클라이언트가 실행 중일 때 홈 서버가 인터넷 연결을 수락하고 응답하려면 어떻게해야합니까?

  15. 15

    파이프에서 입력 수락을 중지하지만 버퍼링 된 데이터를 읽습니다.

  16. 16

    파이프에서 입력 수락을 중지하지만 버퍼링 된 데이터를 읽습니다.

  17. 17

    자체적으로 데이터에 대해 일종의 작업을 수행하기 위해 서버 측에서 PHP를 만드는 방법이 있습니까?

  18. 18

    클라이언트 측에서 .Net Core 컨트롤러가 반환 한 JSON을 읽을 수 없습니다.

  19. 19

    Windows Azure-전송 연결에서 데이터를 읽을 수 없음 : 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

  20. 20

    TcpListener + TcpClient-닫기 전에 클라이언트가 데이터를 읽을 때까지 기다립니다.

  21. 21

    동일한 컴퓨터의 OpenVPN 클라이언트 및 서버-클라이언트가 연결되어있을 때 서버에서 연결을 허용하지 않습니다.

  22. 22

    클라이언트가 netty에서 연결 해제되었는지 확인하기위한 TCP 연결 유지

  23. 23

    C ++ 서버가 클라이언트 / Winsock에서 데이터를받을 수 없습니다.

  24. 24

    일부 클라이언트에서만 "425 데이터 연결을 열 수 없습니다"

  25. 25

    WCF 클라이언트가 오류로 인해 WCF 서버에 연결할 수 없습니다.

  26. 26

    파이썬 메서드를 호출해도 jinja2를 사용하는 클라이언트 측에는 영향을 미치지 않습니다.

  27. 27

    TCP 클라이언트가 TCP 서버에 연결할 수 없습니다.

  28. 28

    Blazor 클라이언트 측 (WebAssembly)은 startup.cs에서 json 파일을 읽습니다.

  29. 29

    Vuetify : 서버 측 페이지를 매긴 데이터 테이블이 클라이언트 측을 정렬하지 않습니다.

뜨겁다태그

보관