Go基础编程:Socket编程
2018-01-18 10:56
295 查看
1 什么是Socket
Socket起源于Unix,而Unix基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。Socket就是该模式的一个实现,网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用:Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。常用的Socket类型有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。
2 TCP的C/S架构
3 示例程序
3.1 服务器代码
package main import ( "fmt" "log" "net" "strings" ) func dealConn(conn net.Conn) { defer conn.Close() //此函数结束时,关闭连接套接字 //conn.RemoteAddr().String():连接客服端的网络地址 ipAddr := conn.RemoteAddr().String() fmt.Println(ipAddr, "连接成功") buf := make([]byte, 1024) //缓冲区,用于接收客户端发送的数据 for { //阻塞等待用户发送的数据 n, err := conn.Read(buf) //n代码接收数据的长度 if err != nil { fmt.Println(err) return } //切片截取,只截取有效数据 result := buf[:n] fmt.Printf("接收到数据来自[%s]==>[%d]:%s\n", ipAddr, n, string(result)) if "exit" == string(result) { //如果对方发送"exit",退出此链接 fmt.Println(ipAddr, "退出连接") return } //把接收到的数据转换为大写,再给客户端发送 conn.Write([]byte(strings.ToUpper(string(result)))) } } func main() { //创建、监听socket listenner, err := net.Listen("tcp", "127.0.0.1:8000") if err != nil { log.Fatal(err) //log.Fatal()会产生panic } defer listenner.Close() for { conn, err := listenner.Accept() //阻塞等待客户端连接 if err != nil { log.Println(err) continue } go dealConn(conn) } }
3.2 客服端代码
package main import ( "fmt" "log" "net" ) func main() { //客户端主动连接服务器 conn, err := net.Dial("tcp", "127.0.0.1:8000") if err != nil { log.Fatal(err) //log.Fatal()会产生panic return } defer conn.Close() //关闭 buf := make([]byte, 1024) //缓冲区 for { fmt.Printf("请输入发送的内容:") fmt.Scan(&buf) fmt.Printf("发送的内容:%s\n", string(buf)) //发送数据 conn.Write(buf) //阻塞等待服务器回复的数据 n, err := conn.Read(buf) //n代码接收数据的长度 if err != nil { fmt.Println(err) return } //切片截取,只截取有效数据 result := buf[:n] fmt.Printf("接收到数据[%d]:%s\n", n, string(result)) } }
3.3 运行结果
相关文章推荐
- Socket原理与编程基础(转)
- python socket编程基础知识
- Java Socket网络编程初级入门-Java基础-Java-编程开发
- socket编程基础
- 基于epoll的socket编程(1)------ socket编程基础
- LinuxC/C++编程基础(16) boost异步socket处理
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(一)----基础类库部分
- 服务器开发【三】----网络编程的基础SOCKET(3)
- Android基于客户端和服务器的Socket编程例子之Socket基础通讯--socket相关知识
- Socket原理与编程基础
- Linux 下Socket编程基础(转)
- SOCKET网络编程基础知识总结
- linux基础编程 套接字socket 完整的服务器端多线程socket程序
- 你得学会并且学得会的Socket编程基础知识 (转)
- 【原创】《Linux高级程序设计》杨宗德著 - Linux Socket网络编程基础 - 网络通信基础
- linux socket编程基础1
- linux socket编程基础3
- Go编程基础——接口interface
- go语言 基础编程学习笔记
- Go基础编程:异常处理(error接口、panic、recover)