作者ptthidebear (= =)
看板C_and_CPP
標題[問題] server同時等待recv不同client傳送資料?
時間Tue May 26 20:27:42 2015
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
Winsock2
問題(Question):
各位好,小弟是socket的初學者,最近想要實作一個server,
目的是在建立約4個連線(client使用不同的port連接server)之後,
這些client會傳送data給server,server接收到某個client的訊息後,
再根據是哪個client送的訊息去做相對應的事情。
理論上來說這些client不會同時送資料給server,同時間可能只有一個,
想請教各位大大,這樣一定得用multi-thread的方式實做嗎?
今天有稍微看了一下select()這個function,看到的example都是
select --> accept --> recv 的順序,但我需要做的是連線已經建立了,
就等不同的client send data給server,使用recv的話只能等待某個特定
socket connection傳資料過來,不能同時等4個connection,看收到哪個
之後再看是哪個socket收到的去做對應的事。
請教一下有什麼解法是不需要multi-thread但可以達到此需求的做法嗎?
server做的事情只有收資料時需要知道是哪個connection送資料過來這樣子。
感謝大家!!!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.195.211.153
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1432643264.A.698.html
→ scwg: accept 之後的 fd 也可以放到 readfds 裡, select 回來的時 05/26 20:37
→ scwg: 候檢查, 只有 serversock 用 accept, 其他可以用 recv 收 05/26 20:38
→ q82419: multi-process (被打 05/27 02:49
→ Jockey66666: 你說client使用不同的port(server的?)去連server 05/27 09:07
→ Jockey66666: 既然都開不同port了那就不用多開thread吧? 05/27 09:08
→ Jockey66666: 雖然這樣有點怪怪的,也許是我誤會你的意思了 05/27 09:08
推 iloveyouever: server應該是同一個port,樓上有點誤解 05/29 10:27
推 overhead: 不是很懂 你的意思是你覺得用select的recv會被block住? 05/30 10:29
→ overhead: 不會喔 select配合FD_ISSET 就不會被block了 05/30 10:30
→ overhead: 看你的需求 select是ok的 05/30 10:31