2017-11-14 11 views
-1

bad address 오류를 제공하는 TCP 클라이언트가 있습니다. 나는 코드의이 점과 관련이 있다고 생각하지만, 심지어 possibilites 모든 종류의 시도, 나는 그것이 작동되도록 할 수 없습니다클라이언트에서 읽을 때 소켓 오류가 발생합니다.

n=recv(sockfd,&buffer[0],1000,0); 

버퍼는 다음과 같이 정의된다 std::vector<unsigned char> buffer; 내가 읽기 루프에 입력하기 전에 1000로 조정 것 . 내가 어떻게 고칠 수 있니?

----------- 편집

newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen); 

나는 clilen 선언으로 인한 오류 알고 있어요, 그래서 이것은 내가 그것을 할 방법은 다음과 같습니다

socklen_t clilen= sizeof(cli_addr); 

---- 해결책 :

소켓을 만들기 전에 모드를 설정했는데, 이는 오작동을 일으켰습니다.

+0

recv가 반환 된 후 n으로 설정되는 값은 무엇입니까? –

+0

'accept()'호출에 소스를 게시하십시오. –

+0

@JeremyFriesner'n7의 값은 -1입니다. @AndyBrown 코드가 게시되었습니다. 감사합니다. – Lomazo

답변

0
n=recv(sockfd,&buffer[0],1000,0); 

문제가 있습니다. 청취 소켓에서 수신 중입니다. 다음과 같아야합니다.

n=recv(newsockfd,&buffer[0],1000,0); 
+0

Im 두려워하지 않습니다. 첫 번째'recv()'는 클라이언트 쪽이고'accept()'는 서버 쪽입니다. – Lomazo

+0

질문에 제공된 유일한 증거는 청취 소켓에서'recv()'를 호출하고 있음을 분명히 보여줍니다. 다른 소켓에서 다른 소켓에서 호출하는 경우 코드를 게시하지 않은 상태에서 다른 프로세스에서 코드를 아직 게시하지 않은 상태에서 코드를 작성하거나 연결하지 못한 것일 수 있습니다. 귀하의 질문에 명확한 설명이 필요합니다. 그것을 명확히하십시오. – EJP