pthread를 통해 소켓 ID를 어떻게 보낼 수 있습니까?

루이

라즈베리 파이에 서버가 있고 멀티 스레딩을 허용하고 싶습니다. 서버가 작동 중입니다. 클라이언트가 창에 있습니다. pthread_create를 통해 소켓 ID를 보내야한다고 생각하지만 방법을 찾지 못했습니다. 보내야 할 다른 것이 있습니까? 이를 수행하는 가장 좋은 방법은 무엇입니까?

인터넷을 검색하고 stackoverflow가 포함되어 있으며 몇 가지 해결 방법을 시도했지만 작동하지 않았습니다.

const int PORT = 12000;
TCPServer tcp;
pthread_t my_thread[MAXCLIENTQUEUE];
int clientID = 0;

int main()
{

    tcp.setup(PORT);    

    int clientQueueSize = 0, threadJoin = 0;
    void *res;

    do {
        socklen_t sosize = sizeof(tcp.clientAddress);
        //realizar o accept
        tcp.newsockfd[clientQueueSize] = accept(tcp.sockfd, (struct sockaddr*) & tcp.clientAddress, &sosize);
        if (tcp.newsockfd[clientQueueSize] == -1)
        {
            cout << "Error accepting -> " << tcp.newsockfd[clientQueueSize] << endl;
            tcp.detach();
        }
        cout << ">- accept: " << strerror(errno) << " / codigo: " << tcp.newsockfd[clientQueueSize] << " - Endereco: " << inet_ntoa(tcp.clientAddress.sin_addr) << endl;
        clientID++;
        cout << ">>> client accepted" << " | Client ID: " << clientID << endl;
        // criar threads
        int ret = pthread_create(&my_thread[clientQueueSize], NULL, messenger, &tcp.newsockfd[clientQueueSize]);
        cout << ">- pthread: " << strerror(errno) << " / codigo: " << ret << endl;
        if (ret != 0) {
            cout << "Error: pthread_create() failed\n" << "thread_n " << my_thread[clientQueueSize] << endl;
            exit(EXIT_FAILURE);
        }
        cout << "thread n " << my_thread[clientQueueSize] << endl;
        clientQueueSize++;
        }
    while (clientQueueSize < MAXCLIENTQUEUE);

    pthread_exit(NULL);

    return 0;
}

서버는 다중 연결을 허용하지만 첫 번째 클라이언트에만 메시지를 보내고 다른 클라이언트는 성공적으로 연결되지만 메시지를 수신하지 않습니다. 서버가 모든 클라이언트에게 메시지를 보낼 수 있기를 바랍니다.

마이클 코우다 키스

모든 소켓에 대한 스레드를 만들어야합니다. 또는 Windows 종속 비동기 선택 방법을 사용합니다.

PS pthread를 잊어 버리고 표준 std :: thread 사용하십시오 .

   map<SOCKET,std::string> clients;
   void newclient(SOCKET x)
   {
       for(;;)
       {
       int r = recv(x,...);
       if (r == 0 || r == -1) 
           break;
       }
     // remove it from clients, ensure proper synchronization

   }

   void server()
   {
      SOCKET x = socket(...);
      bind(x,...);
      listen(x,...);
      for(;;)
       {
           auto s = accept(x,...);
           if (s == INVALID_SOCKET)
               break;

           // save to a map, for example, after ensuring sync with a mutex and a lock guard

           m[s] = "some_id";

           std::thread t(newclient,s);
           s.detach();
       }
   }

   int main() // 
   {
          // WSAStartup and other init

          std::thread t(server);
          t.detach();

          // Message Loop or other GUI

   }

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

AJAX를 통해 YAML을 어떻게 보낼 수 있습니까?

분류에서Dev

ajax 및 PHP를 통해 ID 값을 어떻게 보낼 수 있습니까?

분류에서Dev

소켓을 통해 PDF 파일을 어떻게 보낼 수 있습니까?

분류에서Dev

Ajax를 통해 PHP "echo"를 어떻게 보낼 수 있습니까?

분류에서Dev

json을 통해 루프 데이터를 어떻게 보낼 수 있습니까?

분류에서Dev

jQuery를 통해 파일을 어떻게 보낼 수 있습니까?

분류에서Dev

소프트웨어를 통해 어떤 프로세서 소켓이 있는지 알아낼 수 있습니까?

분류에서Dev

Java 객체를 obj-c로, obj-c를 소켓을 통해 Java로 보낼 수 있습니까?

분류에서Dev

소켓을 통해 보낼 RSA 키를 피클 할 수 없습니다.

분류에서Dev

AJAX를 통해이 curl 요청에 해당하는 것을 어떻게 보낼 수 있습니까?

분류에서Dev

Javascript 클래스 내에서 Ajax를 통해 객체를 어떻게 보낼 수 있습니까?

분류에서Dev

Twilio를 통해 로컬 데이터베이스 항목을 어떻게 보낼 수 있습니까?

분류에서Dev

Ajax를 통해 요청을 보낼 때 페이지 중단을 어떻게 중지 할 수 있습니까?

분류에서Dev

소켓을 통해 std :: multimap 데이터를 어떻게 전송할 수 있습니까?

분류에서Dev

새 ApplicationWindow에 부모를 어떻게 보낼 수 있습니까?

분류에서Dev

paho-mqtt client.publish ()를 통해 bytearray를 보낼 수 없습니다. 소켓 오류

분류에서Dev

tkinter의 스레드에서 실행되는 웹 소켓으로 메시지를 어떻게 보낼 수 있습니까?

분류에서Dev

서버가 C의 소켓을 통해 클라이언트에 메시지를 보낼 수 없습니다.

분류에서Dev

Ubuntu는 어떻게 외부 전자 메일 주소로 경고를 보낼 수 있습니까?

분류에서Dev

bash의 함수에서 함수를 어떻게 내보낼 수 있습니까?

분류에서Dev

다른 텍스트 매개 변수와 함께 HTTP POST를 통해 파일을 어떻게 보낼 수 있습니까?

분류에서Dev

어떻게 신속하게 자동 SMS를 보낼 수 있습니까?

분류에서Dev

inversify-express-utils를 사용하여 웹 소켓을 어떻게 통합 할 수 있습니까?

분류에서Dev

여러 웹 페이지를 통해 소켓 연결을 수행하려면 어떻게해야합니까?

분류에서Dev

어떻게 안드로이드 프로토콜을 통해 HTTP 서버에 동시에 여러 파일과 텍스트를 보낼 수 있습니까?

분류에서Dev

메일을 통해 데이터베이스에서 가져 오는 데이터를 어떻게 보낼 수 있습니까?

분류에서Dev

수신자가 소켓을 통해 데이터 속도를 처리 할 수 없으면 어떻게됩니까?

분류에서Dev

JMS를 통해 서브 클래스의 클래스 정의가없는 소비자에게 서브 클래스를 보낼 수 있습니까?

분류에서Dev

API (원격 제어)를 통해 LimeSurvey에서 설문 조사를 내보낼 수 있습니까?

Related 관련 기사

  1. 1

    AJAX를 통해 YAML을 어떻게 보낼 수 있습니까?

  2. 2

    ajax 및 PHP를 통해 ID 값을 어떻게 보낼 수 있습니까?

  3. 3

    소켓을 통해 PDF 파일을 어떻게 보낼 수 있습니까?

  4. 4

    Ajax를 통해 PHP "echo"를 어떻게 보낼 수 있습니까?

  5. 5

    json을 통해 루프 데이터를 어떻게 보낼 수 있습니까?

  6. 6

    jQuery를 통해 파일을 어떻게 보낼 수 있습니까?

  7. 7

    소프트웨어를 통해 어떤 프로세서 소켓이 있는지 알아낼 수 있습니까?

  8. 8

    Java 객체를 obj-c로, obj-c를 소켓을 통해 Java로 보낼 수 있습니까?

  9. 9

    소켓을 통해 보낼 RSA 키를 피클 할 수 없습니다.

  10. 10

    AJAX를 통해이 curl 요청에 해당하는 것을 어떻게 보낼 수 있습니까?

  11. 11

    Javascript 클래스 내에서 Ajax를 통해 객체를 어떻게 보낼 수 있습니까?

  12. 12

    Twilio를 통해 로컬 데이터베이스 항목을 어떻게 보낼 수 있습니까?

  13. 13

    Ajax를 통해 요청을 보낼 때 페이지 중단을 어떻게 중지 할 수 있습니까?

  14. 14

    소켓을 통해 std :: multimap 데이터를 어떻게 전송할 수 있습니까?

  15. 15

    새 ApplicationWindow에 부모를 어떻게 보낼 수 있습니까?

  16. 16

    paho-mqtt client.publish ()를 통해 bytearray를 보낼 수 없습니다. 소켓 오류

  17. 17

    tkinter의 스레드에서 실행되는 웹 소켓으로 메시지를 어떻게 보낼 수 있습니까?

  18. 18

    서버가 C의 소켓을 통해 클라이언트에 메시지를 보낼 수 없습니다.

  19. 19

    Ubuntu는 어떻게 외부 전자 메일 주소로 경고를 보낼 수 있습니까?

  20. 20

    bash의 함수에서 함수를 어떻게 내보낼 수 있습니까?

  21. 21

    다른 텍스트 매개 변수와 함께 HTTP POST를 통해 파일을 어떻게 보낼 수 있습니까?

  22. 22

    어떻게 신속하게 자동 SMS를 보낼 수 있습니까?

  23. 23

    inversify-express-utils를 사용하여 웹 소켓을 어떻게 통합 할 수 있습니까?

  24. 24

    여러 웹 페이지를 통해 소켓 연결을 수행하려면 어떻게해야합니까?

  25. 25

    어떻게 안드로이드 프로토콜을 통해 HTTP 서버에 동시에 여러 파일과 텍스트를 보낼 수 있습니까?

  26. 26

    메일을 통해 데이터베이스에서 가져 오는 데이터를 어떻게 보낼 수 있습니까?

  27. 27

    수신자가 소켓을 통해 데이터 속도를 처리 할 수 없으면 어떻게됩니까?

  28. 28

    JMS를 통해 서브 클래스의 클래스 정의가없는 소비자에게 서브 클래스를 보낼 수 있습니까?

  29. 29

    API (원격 제어)를 통해 LimeSurvey에서 설문 조사를 내보낼 수 있습니까?

뜨겁다태그

보관