2012-09-25 47 views
2

我的班級MasterSlaveSynchronize同時用於發送和收聽hearbeat。 只有一個數據報套接字可用於發送和接收嗎?可以在兩個數據報套接字中使用發送和接收嗎?

2方法波紋管不時運行,可以同時運行。

void MasterSlaveSynchronize::sendHearBeat() { 
    const int HEARBEAT_LEN = 1; 
    const char HEARBEAT[1] = { '1' }; 

    int n = sendto(sock, HEARBEAT, HEARBEAT_LEN, 0,(const struct sockaddr *) &target_, length_); 
    if (n < 0) 
     printf("Sendto"); //TODO ERR 
} 

void MasterSlaveSynchronize::recivedHearBeat() { 
    char buf[1024]; 
    if (bind(sock, (struct sockaddr *) &this_, length_) < 0) 
     printf("binding"); //TODO err 
    while (1) { 
     int n = recvfrom(sock, buf, 1024, 0, (struct sockaddr *) &target_,&length_); 
     if (n < 0) 
      printf("recvfrom"); //TODO ER 
     //TODO update got hearbeat 
    } 

回答

2

是的,它的罰款(的確預期)使用相同的插座sendtorecvfrom

但是,您的recivedHearBeat()函數永遠不會退出。沒關係,如果它在單獨的線程中運行。

+0

是的,確定它運行在不同的線程。該類同時用作發送心跳的客戶端和接收到listenbeat的服務器。可以使用相同的端口發送和接收嗎?和最後一個(和愚蠢) - 套接字的dosnt綁定綁定到一個特定的用法(IP,端口)? –

+0

是的,'bind'確實使套接字特定於那個用於發送和接收的套接字(ip,port)。在發送'sendto'函數之前,'bind'需要發生。 – Alnitak

+0

但sendHearBeat我不需要使用綁定。 –