TCP编程
服务器端代码
package main
import (
"fmt"
"io"
"net"
)
func process(conn net.Conn){
//循环接收数据
defer conn.Close()
for{
buf := make([]byte,1024)
//等待客户端发送信息
fmt.Println("服务器在等待输入",conn.RemoteAddr().String())
n,err :=conn.Read(buf) //没有客户端write发送,阻塞
if err !=nil{
fmt.Println("服务器端Read err", err)
return
}
if err == io.EOF{
fmt.Println("客户端退出")
return
}
//显示客户端发送的内容
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)//标准输入
//从终端读取一行数据,发送给服务器
line, err :=reader.ReadString('\n')
if err !=nil{
fmt.Println("read err", err)
}
//将Line发送
n,err:=conn.Write([]byte(line))
if err !=nil{
fmt.Println("conn write err",err)
}
fmt.Println("客户端发送了",n)
}
客户端循环输入,输入exit结束
Server代码
package main
import (
"fmt"
"net"
)
func process(conn net.Conn){
//循环接收数据
defer conn.Close()
for{
buf := make([]byte,1024)
//等待客户端发送信息
fmt.Println("服务器在等待输入",conn.RemoteAddr().String())
n,err :=conn.Read(buf) //没有客户端write发送,阻塞
if err !=nil{
fmt.Println("服务器端Read err", err)
return
}
//显示客户端发送的内容
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 {
//从终端读取一行数据,发送给服务器
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发送
n, err := conn.Write([]byte(line+"\n"))
if err != nil {
fmt.Println("conn write err", err)
}
fmt.Println("客户端发送了", n)
}
}