我正在嘗試使用C編寫服務器 - 客戶端套接字程序。我有關於如何使用定時器實現它的問題。我想要做的是建立一個服務器和客戶端之間的連接,並具有讀寫操作。我開始知道如何在服務器端使用'timeval'結構的select()。但是我應該在客戶端做些什麼,我可以在套接字上讀取固定的時間。在客戶端套接字程序中使用select()
回答
您可以在客戶端執行完全相同的操作,在select()
系統調用的timeval
結構中設置所需的超時時間。但是在客戶端,使用阻止模式更容易,並使用setsockopt()
和SO_TIMEOUT/SO_RCVTIMEO
選項(無論在平臺上調用它)來控制超時。檢查男子有關頁面。
是準確的,如果你想用「setsockopt的」插座的小例子:
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));
//示例客戶端代碼 time_out.tv_sec = 15; // 15秒 time_out.tv_usec = 0; // 0毫秒 sockfd =套接字(AF_INET,SOCK_STREAM,0); n =連接(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
好吧不要使用讀/寫,但發送/ recv功能,我想! http://linux.die.net/man/2/send http://linux.die.net/man/2/recv – AnyProblemHaveSolution
- 1. 客戶端套接字無法使用poll/select接收數據
- 2. 套接字 - 在客戶端使用INADDR_ANY
- 3. 使用套接字io java客戶端的套接字io客戶端
- 4. 使用select來等待客戶端套接字上的數據
- 5. 使用套接字不工作的Http客戶端程序
- 6. 如何使用客戶端套接字
- 7. 如何在java中使用客戶端套接字程序知道客戶端端口和IP地址
- 8. Asyncrhonous套接字客戶端
- 9. lua套接字客戶端
- 10. 套接字編程客戶端名稱
- 11. 編程web套接字客戶端?
- 12. Python套接字客戶端 - 服務器應用程序
- 13. 的Java套接字客戶端 - 服務器應用程序
- 14. C#多客戶端套接字聊天應用程序
- 15. Java套接字客戶端服務器響應應用程序
- 16. Android應用程序崩潰時打開客戶端套接字
- 17. 套接字客戶端程序中的錯誤
- 18. java中的客戶端/套接字 - 客戶端錯誤
- 19. 用sinon存根套接字客戶端
- 20. 在套接字客戶端中增加內存使用量
- 21. 守護進程 - 使用Unix套接字的客戶端IPC
- 22. 如何使用套接字編程獲取客戶端IP#
- 23. 服務器/客戶端使用套接字編程
- 24. 多線程客戶端 - 服務器聊天,使用套接字
- 25. Java使用客戶端套接字的多個線程
- 26. java套接字客戶端單連接
- 27. 套接字未能接受客戶端?
- 28. 客戶端套接字連接問題
- 29. PHP - 客戶端套接字連接
- 30. 異步套接字客戶端接收
你能否解釋一下你的意思是什麼「的插座上的一段固定時間讀」?你想讓客戶只在有限的時間內連接嗎?或者如果客戶在一段時間內沒有收到任何東西,是否希望客戶超時? –
你有什麼嘗試? https://www.google.ru/search?q=c+socket+select+tutorial –