网络编程

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.

最新文章

  1. SSIS Design6:利用数据流
  2. c1ctf2016 wp
  3. adb命令安装apk,和安装问题daemon not running. starting it now on port 5037解决
  4. SQL Server数据库表重置自增主键号(通常是指ID)
  5. [ javascript canvas toDataURL() clip() ] javascript canvas toDataURL() clip() 属性及方法演示
  6. 【转】Java JDBC连接SQL Server2005错误:通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败
  7. 宏基5750G 不能用内置无线网卡上网
  8. 信号之alarm和pause函数
  9. java新手笔记4 数组
  10. The Promise of Deep Learning
  11. BZOJ 3612: [Heoi2014]平衡( dp )
  12. luogu1117 优秀的拆分 (后缀数组)
  13. 软考自查:数据流图(DFD)
  14. freeswitch dialplan 基础
  15. 用户 'IIS APPPOOL\xxxx' 登录失败
  16. Linux基础命令---lpq查看打印队列
  17. 腾讯云Unbuntu服务器安装桌面环境
  18. hdu 2157 从a点走到b点刚好k步的方案数是多少 (矩阵快速幂)
  19. python------模块定义、导入、优化 ------->re模块
  20. 12.22daily_scrum

热门文章

  1. MySQL拼接字符串,GROUP_CONCAT 值得拥有
  2. SpringBoot学习(三):日志
  3. linux --- 杀掉特定端口进程与启用SSH服务
  4. ROS机器人之话题(一)
  5. 实验11:EIGRP
  6. Django项目在Linux服务器上部署和躺过的坑
  7. sizeof('a')
  8. ListFragment 使用ListView and 自定义Adapter
  9. DOCKER 学习笔记8 Docker Swarm 集群搭建
  10. 最大连续和(dp复习)