golang tcp 回显服务器示例

u011363248 · · 1729 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

golang代码服务器:

package main
import (
 //"io"
 "log"
 "net"
 "time"
 "fmt"
 "runtime"
)
func main() {
 runtime.GOMAXPROCS(4)//设置cpu个数
 // Listen on TCP port 2000 on all interfaces.
 l, err := net.Listen("tcp", ":2000")
 if err != nil {
  log.Fatal(err)
 }
 defer l.Close()
 for {
  conn, err := l.Accept()
  if err != nil {
   log.Fatal(err)
  }
  // Handle the connection in a new goroutine.
  // The loop then returns to accepting, so that
  // multiple connections may be served concurrently.
  go func(c net.Conn) {
   defer c.Close()
   var buf = make([]byte, 512)
   for {
    cnt, err := c.Read(buf)
    if err != nil {
     fmt.Printf("recv failed : %s", err)
     return
    }
   
    //fmt.Println(string(buf[:cnt]))
    time.Sleep(10)
    _, err = c.Write(buf[:cnt])
    if err != nil {
     fmt.Printf("write failed : %s", err)
     return
    }
   }
  }(conn)
 }
}


客户端python代码:

import threading
import sys
import time
import socket, sys
import select

def echo():
    host = "172.16.2.18"
    textport = 2000
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        port = int(textport)
    except ValueError:
        port = socket.getservbyname(textport, 'tcp')
    s.connect((host, port))
    while 1:
        select.select([],[],[],0.1)
        data = time.ctime()
        data.join("\r\n")
        s.sendall(data)
        #print "Looking for replies; press Ctrl-C or Ctrl-Break to stop."
        buf = s.recv(2048)
    

if __name__ == "__main__":
    threads = []
    for i in xrange(3000):
        os = threading.Thread(None,echo)
        os.start()
        threads.append(os)
    
    for x in threads:
        x.join()



有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:u011363248

查看原文:golang tcp 回显服务器示例

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1729 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传