2012-09-14 2 views
0

C에서 서버 - 클라이언트 소켓 프로그램을 작성하려고했습니다. 타이머를 사용하여 달성하는 방법에 관한 질문이 있습니다. 내가 뭘 하려는지 서버와 클라이언트 사이의 연결을 설정하고 읽기 - 쓰기 작업이 있습니다. 나는 'timeval'구조체를 사용하여 서버 측에서 select()를 사용하는 것에 관해 알게되었습니다. 하지만 내가 고정 된 시간 동안 소켓에서 읽을 수있는 클라이언트 측에서해야 할 일은 무엇인가?클라이언트 소켓 프로그램에서 select() 사용

+0

당신이 무엇을 의미하는 정교한을 "고정 된 시간에 대한 소켓에 읽기"? 제한된 시간 동안 만 클라이언트를 연결 하시겠습니까? 아니면 클라이언트가 얼마 동안 아무것도받지 못하면 시간 초과를 원합니까? –

+0

무엇을 시도 했습니까? https://www.google.ru/search?q=c+socket+select+tutorial –

답변

0

시스템 호출 timevalselect() 구조에서 원하는 시간 제한을 설정하여 클라이언트에서 똑같은 작업을 수행 할 수 있습니다. 그러나 클라이언트에서는 블로킹 모드를 사용하고 SO_TIMEOUT/SO_RCVTIMEO 옵션을 사용하여 setsockopt() 옵션을 사용하는 것이 더 쉽습니다.이 옵션은 플랫폼에서 호출되는 모든 시간 제한을 제어하는 ​​데 사용됩니다. 해당 페이지 페이지를 확인하십시오. 당신이 "setsockopt를"와 소켓에 대한 간단한 예를 원하는 경우

0

예 정확한 :

int mySocket; 
struct timeval tv = {0, 0}; // Init to 0 (Or set directly with your values) 

mySocket = socket(AF_INET, SOCK_STREAM, 0); 
// Set the timeout (If you don't have set directly values) 
tv.tv_sec = 10; 
tv.tv_usec = 0; 
// Set The Timeout On Socket RECV 
setsockopt(mySocket, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof(struct timeval)); 
// Set The Timeout On Socket SEND 
setsockopt(mySocket, SOL_SOCKET, SO_SNDTIMEO, (char *)&tv, sizeof(struct timeval)); 
+0

// 샘플 클라이언트 코드 time_out.tv_sec = 15; // 15 초 time_out.tv_usec = 0; // 0 밀리 초 sockfd = 소켓 (AF_INET, SOCK_STREAM, 0); n = connect (sockfd, (struct sockaddr *) 및 serv_addr, sizeof (serv_addr)); fgets (buffer, 255, stdin); n = 쓰기 (sockfd, buffer, strlen (buffer)); n = 읽기 (sockfd, buffer, 255); 위의 예제 코드는 무엇을하려고하는지입니다. 소켓 'sockfd'의 서버에 연결하고 먼저 쓰기 작업을 수행 한 다음 읽기 작업을 수행하십시오. read()는 15 초를 기다린 다음 시간 초과하지만 기다리지 않아야합니다. 도움이 필요하다! – Richard

+0

좋아, 쓰기/쓰기 기능을 사용하지 말아라. 나는 생각한다! http://linux.die.net/man/2/send http://linux.die.net/man/2/recv – AnyProblemHaveSolution