Go语言_net篇
這篇想閱讀的是go的net包,net包提供了各種網絡IO類型,比如有TCP/IP, UDP, 域名解析, Unix domain socket
使用這個包能很容易發送一個tcp請求,創建服務器也再也不需要像C語言那樣createSocket等一系列繁瑣的操作了,用起來那感覺不是一般地爽啊!
?
下面先創建一個簡單的Server端:
package main
?
import (
??? "net"
??? "fmt"
)
?
func main() {
??? if ln, err := net.Listen("tcp", ":8080"); err == nil {
??????? defer ln.Close()
??????? for{
??????????? ln.Accept()
??????????? fmt.Println("Receive a Message")
??????? }
??? }???
}
?
和腳本一樣簡單的寫法。
先net.Listen(), 第一個參數是協議,tcp還是udp,第二個參數是ip地址,這里可以不填寫IP只填寫端口就是
使用defer 來Close,將close寫在listen之后是個好習慣
然后再循環中使用Accept()接受消息
?
?
?
下面是一個可以進行壓力測試的客戶端程序
package main
?
import (
??? "net"
??? "fmt"
)
?
func main() {
??? currency := 20 //并發數,記住,一個連接數是打開一個端口號,window和linux的端口號都是有限制的
??? count := 10 //每條連接發送多少次連接
??? for i:=0;i<currency;i++ {
??????? go func(){
??????????? for j:=0;j<count;j++ {
??????????????? sendMessage()
??????????? }
??????? }()
??? }
??? select{}
}
?
func sendMessage() {
??? conn, err := net.Dial("tcp", "127.0.0.1:8080")
??? if(err != nil) {
??????? panic("error")
??? }
??? header := "GET / HTTP/1.0\r\n\r\n"
??? fmt.Fprintf(conn, header)
}
總結
- 上一篇: linux系统增加swap分区
- 下一篇: 使用DotNetCharting控件生成