go hot update (1)

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

package main

import (
	"net"
	"reflect"
	"fmt"
	"os"
)

func main() {

	listener, _ := net.Listen("tcp", ":8000")
	for {
		c , _ := listener.Accept()
		go connHandler(c)
	}
}

func connHandler(c net.Conn) {
	defer c.Close()
	e := reflect.TypeOf(c).Elem()
	n := e.NumField()
	for i := 0 ; i < n; i++ {
		fmt.Fprintf(os.Stdout, "e.Field(%d) = %v           %v\n", i, e.Field(i).Name, e.Field(i))
	}

	fmt.Fprintf(os.Stdout, "====================\n")

	v := reflect.ValueOf(c)
	fmt.Fprintf(os.Stdout, "reflect.ValueOf(c) %v\n", v)

	v = v.Elem()
	fmt.Fprintf(os.Stdout, "reflect.ValueOf(c).Elem() %v\n", v)
	fmt.Fprintf(os.Stdout, "====================\n")
	for i := 0; i < v.NumField(); i++ {
		fmt.Fprintf(os.Stdout, "v.Field(%d) = %v   %v\n", i, v.Field(i), v.Field(i).Type())
		switch v.Field(i).Type().Kind(){
		case reflect.Int:
			fmt.Fprintf(os.Stdout, "%d\n", v.Field(i).Int())
		}
	}
	fmt.Fprintf(os.Stdout, "====================\n")

	fmt.Fprintf(os.Stdout, "reflect.ValueOf(c).Elem().FieldByName(\"fd\") %v\n", v.FieldByName("fd"))
	fmt.Fprintf(os.Stdout, "reflect.ValueOf(c).Elem().FieldByName(\"fd\").Elem() %v\n", reflect.ValueOf(c).Elem().FieldByName("fd").Elem())
	v = reflect.ValueOf(c).Elem().FieldByName("fd").Elem()

	fmt.Fprintf(os.Stdout, "====================\n")
	for i := 0; i < v.NumField(); i++ {
		fmt.Fprintf(os.Stdout, "v.Field(%d) = %v   %v  %s\n", i, v.Field(i), v.Field(i).Type(), v.Field(i).String())
		switch v.Field(i).Type().Kind(){
		case reflect.Int:
			fmt.Fprintf(os.Stdout, "%d\n", v.Field(i).Int())
		}
	}
	fmt.Fprintf(os.Stdout, "====================\n")

	sysfd := v.FieldByName("sysfd")
	fmt.Fprintf(os.Stdout, "v.FieldByName(\"sysfd\") = %v\n", sysfd)

	fd := uintptr(sysfd.Int())
	fmt.Fprintf(os.Stdout, "fd %v\n", fd)


	f := os.NewFile(fd, "listen socket")
	fmt.Fprintf(os.Stdout, "f = %v\n", f)
	conn, err := net.FileConn(f)

	if err != nil {
		fmt.Fprintf(os.Stdout, "err %v\n", err.Error())
		return
	}
	fmt.Fprintf(os.Stdout, "c %v\n", conn)
	conn.Write([]byte("hello world ~!\n"))
}



[vicky@localhost ~]$ telnet 192.168.1.98 8000
Trying 192.168.1.98...
Connected to 192.168.1.98.
Escape character is '^]'.
hello world ~!

版权声明:本文为博主原创文章,未经博主允许不得转载。


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

本文来自:CSDN博客

感谢作者:eclipser1987

查看原文:go hot update (1)

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

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