[問題] server同時等待recv不同client傳送資料?

看板C_and_CPP作者 (= =)時間9年前 (2015/05/26 20:27), 編輯推噓2(208)
留言10則, 5人參與, 最新討論串1/1
開發平台(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

05/26 20:37, , 1F
accept 之後的 fd 也可以放到 readfds 裡, select 回來的時
05/26 20:37, 1F

05/26 20:38, , 2F
候檢查, 只有 serversock 用 accept, 其他可以用 recv 收
05/26 20:38, 2F

05/27 02:49, , 3F
multi-process (被打
05/27 02:49, 3F

05/27 09:07, , 4F
你說client使用不同的port(server的?)去連server
05/27 09:07, 4F

05/27 09:08, , 5F
既然都開不同port了那就不用多開thread吧?
05/27 09:08, 5F

05/27 09:08, , 6F
雖然這樣有點怪怪的,也許是我誤會你的意思了
05/27 09:08, 6F

05/29 10:27, , 7F
server應該是同一個port,樓上有點誤解
05/29 10:27, 7F

05/30 10:29, , 8F
不是很懂 你的意思是你覺得用select的recv會被block住?
05/30 10:29, 8F

05/30 10:30, , 9F
不會喔 select配合FD_ISSET 就不會被block了
05/30 10:30, 9F

05/30 10:31, , 10F
看你的需求 select是ok的
05/30 10:31, 10F
文章代碼(AID): #1LP6R0QO (C_and_CPP)