[GoLang]GO语言编写的简易TCP服务端、客户端
发布时间:2020-12-16 18:54:53 所属栏目:大数据 来源:网络整理
导读:客户端程序: package mainimport ("net""os""fmt""io")//缓冲区大小const BUFFSIZE = 1024//定义消息缓冲区var buff = make([]byte,BUFFSIZE)//链接处理func handleConn(tcpConn *net.TCPConn,addr string) {if tcpConn == nil {//fmt.Println()return}for{
客户端程序: package main import ( "net" "os" "fmt" "io" ) //缓冲区大小 const BUFFSIZE = 1024 //定义消息缓冲区 var buff = make([]byte,BUFFSIZE) //链接处理 func handleConn(tcpConn *net.TCPConn,addr string) { if tcpConn == nil { //fmt.Println() return } for{ n,err := tcpConn.Read(buff) if err == io.EOF { fmt.Printf("远程链接:%s已经关闭!n",tcpConn.RemoteAddr().String()) return } handleError(err) if string(buff[:n]) == "exit" { fmt.Printf("远程链接:%s退出!n",tcpConn.RemoteAddr().String()) } if n > 0 { fmt.Printf("%s发来消息:%s",addr,string(buff[:n])) } } } func handleError(err error) { if err == nil { return } fmt.Printf("错误:%sn",err.Error()) } func main() { //判断命令行参数是否错误 if len(os.Args) != 2 { fmt.Printf("调用参数错误,程序中断!n") return } //获取通讯端口 port := os.Args[1] //原型:func ResolveTCPAddr(net,addr string) (*TCPAddr,error) ResolveTCPAddr parses addr as a TCP address //分解ip为TCP地址 tcpAddr,err := net.ResolveTCPAddr("tcp4","localhost:" + port) handleError(err) if err != nil { return } //原型:func ListenTCP(net string,laddr *TCPAddr) (*TCPListener,error) ListenTCP announces on the TCP address laddr and returns a TCP listener. //通过TCP地址返回一个TCP监听 tcpListener,err := net.ListenTCP("tcp4",tcpAddr) handleError(err) if err != nil { return } fmt.Printf("启动监听,等待链接!n") //延迟,监听关闭 defer tcpListener.Close() for { //func (l *TCPListener) AcceptTCP() (*TCPConn,error) AcceptTCP accepts the next incoming call and returns the new connection. //等待下一个访问并返回一个新链接 tcpConn,err := tcpListener.AcceptTCP() handleError(err) if err != nil { return } fmt.Printf("客户端:%s已连接!n",tcpConn.RemoteAddr().String()) //延迟,关闭链接 defer tcpConn.Close() //启动一个连接处理线程 go handleConn(tcpConn,tcpConn.RemoteAddr().String()) } } 服务端程序: package main
import (
"net"
"os"
"fmt"
"bufio"
)
const BUFFSIZE = 1024
var buff = make([]byte,BUFFSIZE)
func handleError(err error) {
if err == nil {
return
}
fmt.Printf("错误:%sn",err.Error())
}
func main() {
if len(os.Args) != 2 {
fmt.Printf("参数错误, 程序中断!n")
return
}
port := os.Args[1]
tcpAddr,"localhost:" + port)
handleError(err)
tcpConn,err := net.DialTCP("tcp4",nil,tcpAddr)
handleError(err)
fmt.Printf("连接成功,请输入信息!n")
reader := bufio.NewReader(os.Stdin)
continued := true
inputStr := ""
for(continued){
n,err := reader.Read(buff)
handleError(err)
if n > 0 {
k,_ := tcpConn.Write(buff[:n])
if k > 0 {
inputStr = string(buff[:n])
fmt.Printf("发送消息:%s",inputStr)
if inputStr == "exitn" {
continued = false
}
}
}
}
}
服务端: 客户端:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |