go 网络编程
2024-10-08 07:53:42
网络编程
tcp
1.tcp客户端服务端实现
server/server.go
package main import (
"fmt"
"net"
) /*
tcp客户端服务端实现
*/ func process(conn net.Conn){
//这里我们循环接收客户端发送的消息
defer conn.Close() for{
//创建一个新的切片
buf:=make([]byte,)
//conn.Read(buf)
//1.等待客户端通过conn发送消息
//2.如果客户端没有write[发送],那么协程就阻塞在这里
fmt.Printf("服务器在等待客户端%s 发送消息\n",conn.RemoteAddr().String())
n,err:=conn.Read(buf)//从conn读取
if err!=nil{
fmt.Printf("客户端退出 err=%v",err)
return
}
//3.显示客户端发送的内容,到服务器的终端
fmt.Print(string(buf[:n]))
}
} func main(){
fmt.Println("服务器开始监听。。")
//net.Listen("tcp","0.0.0.0:8888")
listen,err:=net.Listen("tcp","0.0.0.0:8888")
if err!=nil{
fmt.Println("listen err=",err)
return
}
defer listen.Close()//延时关闭listen //循环等待客户端连接
for{
//等待客户端连接
fmt.Println("等待客户端")
conn,err:=listen.Accept()
if err!=nil{
fmt.Println("Accept() en=",err)
}else{
fmt.Printf("Accept() suc con=%v 客户端ip=%v\n",conn,conn.RemoteAddr().String())
}
//这里准备一个协程,为客户端服务
go process(conn)
}
fmt.Printf("listen suc=%v\n",listen)
}
client/client.go
package main import (
"bufio"
"fmt"
"net"
"os"
"strings"
) func main(){
conn,err:=net.Dial("tcp","192.168.1.107:8888")
if err!=nil{
fmt.Println("client dial err=",err)
return
}
//功能一:客户端可以发送单行数据,然后就退出
reader:=bufio.NewReader(os.Stdin)//os.Stdin 代表标准输入终端
for{ //从服务端读取一行用户输入,并准备发送给服务器
line,err:=reader.ReadString('\n')
if err!=nil{
fmt.Println("readString err=",err)
}
line=strings.Trim(line,"\r\n")
if line=="exit"{
fmt.Println("客户端退出。。。")
break
}
//再将line发送给服务器
n,err:=conn.Write([]byte(line))
if err!=nil{
fmt.Println("conn.Write err=",err)
}
fmt.Printf("客户端发送了%d字节的数据",n) }
}
2.
最新文章
- SSIS Design6:利用数据流
- c1ctf2016 wp
- adb命令安装apk,和安装问题daemon not running. starting it now on port 5037解决
- SQL Server数据库表重置自增主键号(通常是指ID)
- [ javascript canvas toDataURL() clip() ] javascript canvas toDataURL() clip() 属性及方法演示
- 【转】Java JDBC连接SQL Server2005错误:通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败
- 宏基5750G 不能用内置无线网卡上网
- 信号之alarm和pause函数
- java新手笔记4 数组
- The Promise of Deep Learning
- BZOJ 3612: [Heoi2014]平衡( dp )
- luogu1117 优秀的拆分 (后缀数组)
- 软考自查:数据流图(DFD)
- freeswitch dialplan 基础
- 用户 'IIS APPPOOL\xxxx' 登录失败
- Linux基础命令---lpq查看打印队列
- 腾讯云Unbuntu服务器安装桌面环境
- hdu 2157 从a点走到b点刚好k步的方案数是多少 (矩阵快速幂)
- python------模块定义、导入、优化 ------->;re模块
- 12.22daily_scrum