這篇想閱讀的是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)
}