```
package main
import (
"fmt"
"net"
)
func HandlerConnect(conn net.Conn) {
defer conn.Close()
//1.獲取客戶端ip地址
addr := conn.RemoteAddr()
fmt.Println("client ip : ", addr)
//2.循環讀取客戶端發送數據
buf := make([]byte, 4096)
for{
n, err := conn.Read(buf)
if err != nil {
fmt.Println("conn read err : ", err)
return
}
if n == 0 {
fmt.Println("檢測到客戶端已關閉, 斷開連接")
}
if "exit\n" == string(buf[:n]) || "exit\r\n" == string(buf[:n]) {
fmt.Println("接收到客戶端退出請求")
return
}
fmt.Println("client said : ", string(buf[:n]))
conn.Write([]byte(string(buf[:n])))
}
}
func main() {
lisenter, err := net.Listen("tcp", "127.0.0.1:8080")
if err != nil{
fmt.Println("listen err : ", err)
return
}
defer lisenter.Close()
for {
fmt.Println("服務器等待客戶端連接.....")
conn, err := lisenter.Accept()
if err!=nil {
fmt.Println("accept err : ", err)
return
}
go HandlerConnect(conn)
}
}
```
- 認識Golang
- 環境配置
- 找不到包
- civil
- 語言基礎
- 執行流程
- 標準命令
- 輸入輸出
- 常量與變量
- 常量的定義和使用
- 變量
- 枚舉
- 數據類型
- 結構體
- 定義和使用
- 函數參數
- 普通數據類型
- 數值型
- 整型
- 浮點類型
- 布爾
- 字符
- 字符串
- 類型轉換
- 復雜數據類型
- 指針
- 定義和使用
- 空指針
- 野指針
- new
- 函數參數
- 數組
- 定義
- 切片
- 切片
- Map
- 定義和使用
- 流程控制
- if
- switch
- for
- break
- continue
- goto
- 函數
- 函數的定義與使用
- 不定參函數
- 函數返回值
- 作用域
- 匿名函數
- 閉包
- 傳值方式
- 常用函數
- 日期
- 包
- 面向對象
- 異常處理
- 文件讀寫
- 正則
- io
- Reader
- Writer
- 接口
- 測試
- os
- json
- Marshal
- Unmarshal
- 網絡編程
- go程
- runtime
- channel
- 無緩沖channel
- 關閉channel
- 單向channel
- 生產者消費者模型
- 定時器
- tcp
- tcp_server
- tcp_client
- tcp_server_并發
- tcp_client_并發
- 常用框架
- http
- server
- get
- head
- 爬蟲
- 百度貼吧
- 百度貼吧( 并發)
- GTK
- beego
- 環境搭建
- model
- 增
- 刪
- 改
- 查
- 模塊
- context
- httplib
- etcd
- 簡介
- 安裝
- 使用
- net/html
- goquery
- redis
- redigo
- 爬蟲
- gocolly/colly
- 區塊鏈
- 微服務
- 服務發現
- consul
- 簡介