1. 程式人生 > >go語言基礎 TCP程式設計 結合Goroutine 多個客戶端訪問一個伺服器

go語言基礎 TCP程式設計 結合Goroutine 多個客戶端訪問一個伺服器

我們平時可以多個使用者往一個伺服器中上傳檔案,這是可以通過TCP程式設計來做到的,我們只要結合go語言的併發,就可以做到

先是伺服器

package main

import (
   "net"
   "os"
//"fmt"
"io"
   "fmt"
)

func main() {
   tcpaddr, _ := net.ResolveTCPAddr("tcp", ":34521") //確定IP地址
listener, _ := net.ListenTCP("tcp", tcpaddr) //監聽埠
for {
      conn, _ := listener.Accept() //請求連線
fmt.Println("有客戶端連入"
,conn.RemoteAddr()) d := make([]byte, 2048) go func(conn net.Conn) { f1, _ := os.OpenFile("e:\\205.jpg", os.O_WRONLY|os.O_CREATE, 0777) for { count, err := conn.Read(d) //收到客戶端出來的檔案 開始讀 if err != nil { break } f1.Write(d[:count]) //把讀到的內容寫到檔案裡儲存下來
} }(conn) conn.Close() //關閉連線 } } }

然後是客戶端

package main

import (
   "net"
   "io/ioutil"
   "fmt"
)

func main(){
   tcpaddr,_:=net.ResolveTCPAddr("tcp","192.168.31.168:34521")//確定伺服器的地址
tcpconn,_:=net.DialTCP("tcp",nil,tcpaddr)//申請連線
defer tcpconn.Close()//完事後關閉
d,_:=ioutil.ReadFile("D:\\205.jpg"
) //讀取本地檔案 tcpconn.Write(d) //把檔案寫給伺服器 fmt.Println(len(d)) }