乙個簡單的go的socket伺服器工作池
處理收包和發包是工作池
server.go
package main
import (
"fmt"
"net"
"strconv"
"time"
"sync"
)type task struct
type result struct
var tasks = make(chan task, 10)
var results = make(chan result, 10)
type session struct
//處理接收的客戶端包,並返回返回包
func process(data byte) byte
//接收傳送包工作池
func worker(wg *sync.waitgroup)
results <- result
task.conn.lock.unlock()
case result := <- results://要傳送的包
fmt.printf("task id %s \n", string(result.data))
result.conn.lock.lock()//加鎖為了保證同乙個客戶端包是順序處理的
result.conn.conn.write(result.data)
result.conn.lock.unlock()}}
}//建立工作池
func createworkerpool(numofworkers int)
wg.wait()
close(results)
}//將任務放到工作池
func allocate(data byte, conn *session)
tasks <- task
time.sleep(1*time.second)
}//啟動工作池
func startpool()
//啟動監聽
func startlisten(port int)
for}
defer listener.close()
}/**
* 接收資料報
*/func recvdatan(conn net.conn, len int) (byte, bool)
nrecv, err := conn.read(buff[ntotalrecv:])
if err != nil
ntotalrecv += nrecv
}return buff, true
}//收包協程
func handleconn(conn *session)
}}func main()
乙個簡單的多執行緒socket
碼了2個小時多,終於弄完了。用的編輯器是qt creator 突然發現在qt creator上,也支援這些底層的c語言。在linux上除錯無誤。寫這個,也算是自己讀書的記錄吧!include include include include include include include includ...
乙個簡單的Socket通訊例子
睡眠一段時間再傳送訊息 sleep start private static void sleep catch interruptedexception e public class server catch ioexception e public void start private void ...
簡單的搭建乙個socket通訊
傳輸控制協議 tcp 是 tcp ip 協議棧中的傳輸層協議,它通過序列確認以及包重發機制,提供可靠bai的資料流傳送和到應用程式的虛擬連線服務。與 ip 協議相結合,tcp 組成了網際網路協議的核心。1 首先需要通訊雙方建立連線 2 然後彼此可以進行資料傳輸 3 資料傳輸結束後就關閉連線 1 基於...