看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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