跳至主要内容

博文

目前显示的是标签为“socket”的博文

golang udp socket

package main import ( f "fmt" "net" ) func main() { addr, err := net.ResolveUDPAddr("udp", ":4822") if err != nil { f.Println(err) return } c, err := net.ListenUDP("udp", addr) if err != nil { f.Println(err) return } defer c.Close() raddr, _ := net.ResolveUDPAddr("udp", "127.0.0.1:4821") c.WriteToUDP([]byte("high ! from shareMe"), raddr) b := make([]byte, 20) n, ra, err := c.ReadFromUDP(b) if err != nil { f.Println(err) return } f.Println("get msg:", ra.String(), string(b[:n])) }

python socket

======server=======: from socket import * sock=socket(AF_INET, SOCK_STREAM) sock.bind(( '' , 12345 )) sock.listen( 5 ) while True : c, addr=sock.accept() while True : try : data=c.recv( 1024 ) except : print (e) c.close() break if not data: break c.send( 'backinfo' .encode( 'utf8' )) c.close() sock.close() ====================== =========Client============= from socket import * c=socket(AF_INET, SOCK_STREAM) c.connect(( '127.0.0.1' , 12345 )) c.send( 'hello from client' .encode( 'utf8' )) data=c.recv( 1024 ) if not data: pass print (data.decode( 'utf8' )) c.close() ===================================

Go语言TCP Socket编程

http://www.cnblogs.com/leoncfor/p/5009263.html //go-tcpsock/server.go func handleConn(c net.Conn) { defer c.Close() // read from the connection b := make([]byte, 512) for { length, err := con.Read(b) if err != nil { f.Println("1 connection closed ") break } if b != nil {...} } // write to the connection //... ... } func main() { l, err := net.Listen("tcp", ":8888") if err != nil { fmt.Println("listen error:", err) return } for { c, err := l.Accept() if err != nil { fmt.Println("accept error:", err) break } // start a new goroutine to handle // the new connection. go handleConn(c) } } 用户层眼中看到的goroutine中的“block socket”,实际上是通过Go runtime中的netpoller通过Non-block socket + I/O多路复用机制“模拟”出来的,真实的underlying socket实际上是non-block的,只是runtime拦截了底层socket系统调用的错误码,并通过netpoller和gor...