클라이언트에서 연결을 기다리지 않고 다중 스레드 서버가 종료됩니다.

케빈

Linux 소켓 프로그래밍 문제.

여러 클라이언트의 연결을 수락 할 수있는 다중 스레드 서버에서 작업 중입니다. 내 문제는 다음 코드를 실행하면 10 개의 스레드를 만든 다음 클라이언트의 연결을 기다리지 않고 종료된다는 것입니다. 누구든지 내 코드에 무엇이 잘못되었는지 말해 줄 수 있습니까? 감사합니다.

// include the library for socket programming
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
// include other useful library
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <string>
#include <pthread.h>
#include <fstream>
#include <time.h>


using namespace std;
static int ListenSoc;
#define LISTENPORT 6000
#define THREADNUM 10

void *AcceptAndService(void *){
   int ClientSoc;
   socklen_t CliLen;
   struct sockaddr_in CliAdd;
   CliLen=sizeof(CliAdd);
   memset((char *)&CliAdd,0,sizeof(CliAdd));
   //accept the connect from the client to do the login
   if(ClientSoc=accept(ListenSoc,(struct sockaddr*)&CliAdd,&CliLen)){
      cout<<"connection from "<<inet_ntoa(CliAdd.sin_addr)<<" has found\n";
   }
   pthread_exit(NULL);
}


int main(){

    //create the thread
    pthread_t thread[THREADNUM];
    //Doing the listen

    struct sockaddr_in SerAdd;
    ListenSoc=socket(AF_INET,SOCK_STREAM,0);
    // set the address
    memset((char *)&SerAdd,0,sizeof(SerAdd));
    SerAdd.sin_port=htons(LISTENPORT);
    SerAdd.sin_family=AF_INET;
    SerAdd.sin_addr.s_addr = INADDR_ANY;
    //bind
    if(bind(ListenSoc,(struct sockaddr*)&SerAdd,sizeof(SerAdd))==-1)
      cout<<"Error in bind";
    else
      cout<<"Bind success";

    //listen
    if(listen(ListenSoc,5)==-1)
       cout<<"Error in listen";
    else
    cout<<"\n\t the register server is waiting for the connection...\n"<<endl;


    //Accept the connect from client
    int i;
    for(i=0;i<THREADNUM;i++){
      cout<<"Accept thread "<<i<<" is being created"<<endl;
      pthread_create(&thread[i], NULL, AcceptAndService, NULL); 
    }
    return 0;
}
rafalopez79

스레드가 끝날 때까지 기다리려면 for 루프 후에 pthread_join을 호출해야합니다.

int i;
for(i=0;i<THREADNUM;i++){
  cout<<"Accept thread "<<i<<" is being created"<<endl;
  pthread_create(&thread[i], NULL, AcceptAndService, NULL); 
}
for(i=0;i<THREADNUM;i++){
  pthread_join(thread[i], NULL);
}

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

클라이언트가 연결을 종료 할 때 완료 포트 스레드가 누출됩니다.

분류에서Dev

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

분류에서Dev

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

분류에서Dev

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

분류에서Dev

PyQt, 다른 클래스의 메서드에 연결하기 위해 버튼을 누르면 코드가 __init__를 종료하지 않습니다.

분류에서Dev

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

분류에서Dev

Android 서비스의 onBind가 호출되지 않고 클라이언트가 연결된 상태에서도 onDestroy가 호출됩니다.

분류에서Dev

스레드에서 Google API 클라이언트에서 연결 콜백을받을 때까지 기다리는 방법

분류에서Dev

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

분류에서Dev

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

분류에서Dev

클라이언트가 핸드 셰이크를 닫지 않고 웹 소켓에서 연결을 끊습니다 (브라우저 탭 닫기). 이것을 올바르게 처리하는 방법?

분류에서Dev

스레드를 사용하지 않고 Windows에서 여러 클라이언트 연결을 처리하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

클라이언트가 연결되면 ThreadingTCPServer가 종료되지 않습니다.

분류에서Dev

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

분류에서Dev

SignalR 클라이언트는 서버가 종료되거나 다시 시작될 때 재 연결 이벤트를 호출하지 않습니다.

분류에서Dev

C #의 TCP 클라이언트 서버, 아무것도 표시하지 않고 연결 중입니다.

분류에서Dev

TCP는 클라이언트가 먼저 연결을 종료하도록 서버가 먼저 연결을 종료하도록합니다.

분류에서Dev

파이썬 다중 스레드 서버가 클라이언트에서 데이터를받을 수 없습니다.

분류에서Dev

스레드가 예기치 않게 종료됩니다. C ++

분류에서Dev

오류 : 클라이언트가 서버에서 요청한 인증 프로토콜을 지원하지 않습니다. MySQL 클라이언트 업그레이드 고려

분류에서Dev

오류 : ER_SUPPORTED_AUTH_MODE : 클라이언트가 서버에서 요청한 인증 프로토콜을 지원하지 않습니다. MySQL 클라이언트 업그레이드를 고려하십시오.

분류에서Dev

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

분류에서Dev

apt-get 업데이트에 "패키지 목록을 읽는 중 ... 완료"라고 표시되고 프로세스가 종료됩니다.

분류에서Dev

apt-get 업데이트에 "패키지 목록을 읽는 중 ... 완료"라고 표시되고 프로세스가 종료됩니다.

분류에서Dev

OKHttp 클라이언트 연결에서 명시 적으로 다중 스트림을 여는 방법

분류에서Dev

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

분류에서Dev

SMTP 서버에 보안 연결이 필요하거나 클라이언트가 인증되지 않았습니다. godaddy에 업로드하는 경우

분류에서Dev

다중 클라이언트가 연결을 시도 할 때 다중 스레드 서버에서 "삭제 된 개체에 액세스 할 수 없음"오류 발생

분류에서Dev

내 TCP 클라이언트가 내 TCP 서버에 연결되지 않습니다.

Related 관련 기사

  1. 1

    클라이언트가 연결을 종료 할 때 완료 포트 스레드가 누출됩니다.

  2. 2

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

  3. 3

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

  4. 4

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

  5. 5

    PyQt, 다른 클래스의 메서드에 연결하기 위해 버튼을 누르면 코드가 __init__를 종료하지 않습니다.

  6. 6

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

  7. 7

    Android 서비스의 onBind가 호출되지 않고 클라이언트가 연결된 상태에서도 onDestroy가 호출됩니다.

  8. 8

    스레드에서 Google API 클라이언트에서 연결 콜백을받을 때까지 기다리는 방법

  9. 9

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

  10. 10

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

  11. 11

    클라이언트가 핸드 셰이크를 닫지 않고 웹 소켓에서 연결을 끊습니다 (브라우저 탭 닫기). 이것을 올바르게 처리하는 방법?

  12. 12

    스레드를 사용하지 않고 Windows에서 여러 클라이언트 연결을 처리하는 가장 좋은 방법은 무엇입니까?

  13. 13

    클라이언트가 연결되면 ThreadingTCPServer가 종료되지 않습니다.

  14. 14

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

  15. 15

    SignalR 클라이언트는 서버가 종료되거나 다시 시작될 때 재 연결 이벤트를 호출하지 않습니다.

  16. 16

    C #의 TCP 클라이언트 서버, 아무것도 표시하지 않고 연결 중입니다.

  17. 17

    TCP는 클라이언트가 먼저 연결을 종료하도록 서버가 먼저 연결을 종료하도록합니다.

  18. 18

    파이썬 다중 스레드 서버가 클라이언트에서 데이터를받을 수 없습니다.

  19. 19

    스레드가 예기치 않게 종료됩니다. C ++

  20. 20

    오류 : 클라이언트가 서버에서 요청한 인증 프로토콜을 지원하지 않습니다. MySQL 클라이언트 업그레이드 고려

  21. 21

    오류 : ER_SUPPORTED_AUTH_MODE : 클라이언트가 서버에서 요청한 인증 프로토콜을 지원하지 않습니다. MySQL 클라이언트 업그레이드를 고려하십시오.

  22. 22

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

  23. 23

    apt-get 업데이트에 "패키지 목록을 읽는 중 ... 완료"라고 표시되고 프로세스가 종료됩니다.

  24. 24

    apt-get 업데이트에 "패키지 목록을 읽는 중 ... 완료"라고 표시되고 프로세스가 종료됩니다.

  25. 25

    OKHttp 클라이언트 연결에서 명시 적으로 다중 스트림을 여는 방법

  26. 26

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

  27. 27

    SMTP 서버에 보안 연결이 필요하거나 클라이언트가 인증되지 않았습니다. godaddy에 업로드하는 경우

  28. 28

    다중 클라이언트가 연결을 시도 할 때 다중 스레드 서버에서 "삭제 된 개체에 액세스 할 수 없음"오류 발생

  29. 29

    내 TCP 클라이언트가 내 TCP 서버에 연결되지 않습니다.

뜨겁다태그

보관