客户端程序:
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("错误:%s\n", 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("错误:%s\n", err.Error())
}
func main() {
if len(os.Args) != 2 {
fmt.Printf("参数错误, 程序中断!\n")
return
}
port := os.Args[1]
tcpAddr, err := net.ResolveTCPAddr("tcp4", "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 == "exit\n" {
continued = false
}
}
}
}
}
服务端:
客户端: