這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
android p2p兩篇文章:
http://blog.csdn.net/gophers/article/details/38060307
http://blog.csdn.net/max2005/article/details/12237905
官方文檔:http://developer.android.com/training/connect-devices-wirelessly/wifi-direct.html
golang,
http://blog.csdn.net/gophers/article/details/37815009
- func (srv *Server) Serve(l net.Listener) error {
- defer l.Close()
- var tempDelay time.Duration
- // 這個迴圈就是伺服器的主迴圈了,通過傳進來的listener接收來自用戶端的請求並建立串連,
- // 然後為每一個串連建立routine執行c.serve(),這個c.serve就是具體的服務處理了
- for {
- rw, e := l.Accept()
- if e != nil {
- if ne, ok := e.(net.Error); ok && ne.Temporary() {
- if tempDelay == 0 {
- tempDelay = 5 * time.Millisecond
- } else {
- tempDelay *= 2
- }
- if max := 1 * time.Second; tempDelay > max {
- tempDelay = max
- }
- srv.logf("http: Accept error: %v; retrying in %v", e, tempDelay)
- time.Sleep(tempDelay)
- continue
- }
- return e
- }
- tempDelay = 0
- c, err := srv.newConn(rw)
- if err != nil {
- continue
- }
- c.setState(c.rwc, StateNew) // before Serve can return
- go c.serve() // <-這裡為每一個建立的串連建立routine之後進行服務
- }
- }
第30行表示用線程處理網路回來的資料,所以go一般都有很多線程