這麼搞:客戶端主程式int main(){ 一個單鏈表的頭節點 root; 一個讀寫鎖 //用來控制連結串列的操作 開始監聽 while(1) { if監聽到了新的tcp連線 { malloc一個連結串列節點p 取得寫鎖 把p加到連結串列的最後面 啟動一個新的執行緒 xinxiancheng(socketfd,p);//正確的寫法大概是這樣pthread_create(&m_tid,&attr,armscHandler,arg) 釋放寫鎖 } }} 執行緒函式這樣搞xinxiancheng(int socket,struct node *p){ while(1) { 讀sockt 如果讀到了(如果對方關閉了則直接break) { 獲取寫鎖 把讀到的內容寫到p裡面(struct node 裡面一定要有一個存放讀到的內容的buff) 釋放寫鎖 } 獲取讀鎖 從root開始讀 把所有連結串列裡的內容寫到socket裡面。 釋放讀鎖 }} 大概思路就是這樣。還有一些細節。比如:node的buff怎麼控制,寫socket的時候要不要區分誰是誰,讀寫的方式(推薦非阻塞)等等。這些都可以在上面的基礎上進行細化。
這麼搞:客戶端主程式int main(){ 一個單鏈表的頭節點 root; 一個讀寫鎖 //用來控制連結串列的操作 開始監聽 while(1) { if監聽到了新的tcp連線 { malloc一個連結串列節點p 取得寫鎖 把p加到連結串列的最後面 啟動一個新的執行緒 xinxiancheng(socketfd,p);//正確的寫法大概是這樣pthread_create(&m_tid,&attr,armscHandler,arg) 釋放寫鎖 } }} 執行緒函式這樣搞xinxiancheng(int socket,struct node *p){ while(1) { 讀sockt 如果讀到了(如果對方關閉了則直接break) { 獲取寫鎖 把讀到的內容寫到p裡面(struct node 裡面一定要有一個存放讀到的內容的buff) 釋放寫鎖 } 獲取讀鎖 從root開始讀 把所有連結串列裡的內容寫到socket裡面。 釋放讀鎖 }} 大概思路就是這樣。還有一些細節。比如:node的buff怎麼控制,寫socket的時候要不要區分誰是誰,讀寫的方式(推薦非阻塞)等等。這些都可以在上面的基礎上進行細化。