TCP編程
服務器端代碼
package main
import (
"fmt"
"io"
"net"
)
func process(conn net.Conn){
//循環(huán)接收數(shù)據(jù)
defer conn.Close()
for{
buf := make([]byte,1024)
//等待客戶端發(fā)送信息
fmt.Println("服務器在等待輸入",conn.RemoteAddr().String())
n,err :=conn.Read(buf) //沒有客戶端write發(fā)送,阻塞
if err !=nil{
fmt.Println("服務器端Read err", err)
return
}
if err == io.EOF{
fmt.Println("客戶端退出")
return
}
//顯示客戶端發(fā)送的內容
fmt.Print(string(buf[:n]))
}
}
func main(){
listen, err :=net.Listen("tcp","127.0.0.1:8888")
if err != nil{
fmt.Println("Listen Error=",err)
return
}
defer listen.Close()//
for {
fmt.Println("等待連接")
conn,err := listen.Accept()
if err !=nil{
fmt.Println("Accept 出錯了")
}else {
fmt.Println("Accet success=%v",conn)
fmt.Println("客戶端IP",conn.RemoteAddr().String())
}
go process(conn)
}
fmt.Printf("Listen=%v",listen)
}
客戶端代碼
package main
import (
"bufio"
"fmt"
"net"
"os"
)
func main(){
conn, err:=net.Dial("tcp", "127.0.0.1:8888")
if err != nil{
fmt.Println("Dial失敗=",err)
return
}
fmt.Println("conn成功",conn)
reader :=bufio.NewReader(os.Stdin)//標準輸入
//從終端讀取一行數(shù)據(jù),發(fā)送給服務器
line, err :=reader.ReadString('\n')
if err !=nil{
fmt.Println("read err", err)
}
//將Line發(fā)送
n,err:=conn.Write([]byte(line))
if err !=nil{
fmt.Println("conn write err",err)
}
fmt.Println("客戶端發(fā)送了",n)
}
客戶端循環(huán)輸入,輸入exit結束
Server代碼
package main
import (
"fmt"
"net"
)
func process(conn net.Conn){
//循環(huán)接收數(shù)據(jù)
defer conn.Close()
for{
buf := make([]byte,1024)
//等待客戶端發(fā)送信息
fmt.Println("服務器在等待輸入",conn.RemoteAddr().String())
n,err :=conn.Read(buf) //沒有客戶端write發(fā)送,阻塞
if err !=nil{
fmt.Println("服務器端Read err", err)
return
}
//顯示客戶端發(fā)送的內容
fmt.Print(string(buf[:n]))
}
}
func main(){
listen, err :=net.Listen("tcp","127.0.0.1:8888")
if err != nil{
fmt.Println("Listen Error=",err)
return
}
defer listen.Close()//
for {
fmt.Println("等待連接")
conn,err := listen.Accept()
if err !=nil{
fmt.Println("Accept 出錯了")
}else {
fmt.Println("Accet success=%v",conn)
fmt.Println("客戶端IP",conn.RemoteAddr().String())
}
go process(conn)
}
fmt.Printf("Listen=%v",listen)
}
Client代碼
package main
import (
"bufio"
"fmt"
"net"
"os"
"strings"
)
func main(){
conn, err:=net.Dial("tcp", "127.0.0.1:8888")
if err != nil{
fmt.Println("Dial失敗=",err)
return
}
fmt.Println("conn成功",conn)
reader :=bufio.NewReader(os.Stdin)//標準輸入
for {
//從終端讀取一行數(shù)據(jù),發(fā)送給服務器
line, err := reader.ReadString('\n')
if err != nil {
fmt.Println("read err", err)
}
//如果輸入為exit退出
line=strings.Trim(line,"\r\n")
if line =="exit"{
fmt.Println("客戶端退出")
break
}
//將Line發(fā)送
n, err := conn.Write([]byte(line+"\n"))
if err != nil {
fmt.Println("conn write err", err)
}
fmt.Println("客戶端發(fā)送了", n)
}
}