草庐IT

m_socket

全部标签

sockets - IPv6 包头操作

我需要检查和修改IPv6扩展header。所以我设置了一个原始套接字来监听本地地址上的所有IP数据包。packagemainimport("log""net")funcmain(){c,err:=net.ListenIP("ip6:tcp",&net.IPAddr{IP:net.IPv6loopback,Zone:"",})iferr!=nil{panic(err)}buf:=make([]byte,1024)for{numRead,ipaddr,err:=c.ReadFromIP(buf)log.Print(numRead,ipaddr,err)log.Printf("%X\n",b

sockets - 将 net.Conn.Read 用于持久 TCP 套接字的正确方法是什么

我的Go服务器上有一个有效的TCP套接字设置。我接受传入连接,运行for循环并使用net.Conn.Read函数读取传入数据。但这对我来说没有意义。它如何知道已收到完整消息以便继续返回消息大小?这是我目前的代码:func(tcpSocket*TCPServer)HandleConnection(connnet.Conn){println("Handlingconnection!",conn.RemoteAddr().String(),"connected!")recieveBuffer:=make([]byte,50)//largestmessageweevergetis50bytes

sockets - 在 Golang 中限制 tcp 下载速度

我希望能够在我的代码中限制TCP连接的带宽。This问题有一些线索,但不完全是我想要的。我曾尝试使用类似的方法破解go标准库(net/tcp包)的src代码,但失败了。我的主要想法是以某种方式将数据从系统调用缓慢写入内部缓冲区,从而使操作系统丢弃tcp数据包。 最佳答案 如评论中所述,最简单的方法是使用wondershaper工具在操作系统级别执行此操作。如果您查看“wondershaper”'脚本,它使用来自'iproute2的'/sbin/tc'命令'包裹。我知道这并不是您想要做的,但是您可以通过使用os.exec()在源代码中

sockets - 通过 udp 套接字发送 float32 值

我正在做一个Go项目,我想使用UDPSocket发送float32值。我不明白的是,在发送这些数字之前将它们转换为字节缓冲区的最佳方法是什么,以及如何在接收到它们后将它们转换回float32。目前我正在使用我在网上找到的以下函数转换float32->[]byte,但我什至不确定我是否得到了我想要的:funcFloat32bytes(floatfloat32)[]byte{bits:=math.Float32bits(float)bytes:=make([]byte,4)binary.LittleEndian.PutUint32(bytes,bits)returnbytes}我仍然不知道

sockets - Go 中的网络编程有哪些选项?

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭5年前。Improvethisquestion我希望使用TCP套接字编写一个简单的客户端/服务器。有关于如何使用Go进行网络编程的想法吗?

sockets - golang net.UDPConn 和 net.TCPConn 线程安全吗??我可以在多线程中读取或写入单个 UDPConn 对象吗?

1.我们能否在同一个net.UDPConn或net.TCPConn对象上从一个线程调用发送并从另一个线程调用接收?2.我们能否从同一net.UDPConn或net.TCPConn对象上的不同线程并行调用多个发送?我也找不到同样好的文档。golangsocketapi线程安全吗?我发现很难测试它是否是线程安全的。方向上的任何指示都会有所帮助。我的测试代码如下:packagemainimport("fmt""net""sync")funcudp_server(){//createlistenconn,err:=net.ListenUDP("udp",&net.UDPAddr{IP:net.

sockets - Go语言如何创建客户端?

我是新来的,我试图用go语言准备客户端服务器并尝试编写代码,但它没有给出任何输出。它不会给出任何错误,只是在倾听。请有人帮助我,我想使用go创建身份验证系统,其中服务器使用用户名密码对客户端进行身份验证..服务器:packagemainimport("fmt""net")funcmain(){service:="0.0.0.0:8080"tcpAddr,err:=net.ResolveTCPAddr("tcp",service)checkError(err)listener,err:=net.ListenTCP("tcp",tcpAddr)checkError(err)for{conn

sockets - golang tcp 套接字在写入后不立即发送消息

我的GO版本是1.1.1服务器在连接关闭后收到消息,但设置了NoDelay。有什么问题吗addr,_:=net.ResolveTCPAddr("tcp","localhost:5432")conn,err:=net.DialTCP("tcp",nil,addr)deferconn.Close()iferr!=nil{fmt.Println("connectfail")return}err=conn.SetNoDelay(true)iferr!=nil{fmt.Println(err.Error())}for{varmessagestring_,err:=fmt.Scanln(&mess

sockets - 在 go 中不阅读而窥视 Conn

我有一个服务器net.Conn,我想在读出字节之前查看它,以检查它是客户端尝试使用的纯文本协议(protocol),还是SSL/TLS。正在检查http://golang.org/pkg/net/,Conn接口(interface)似乎没有这样的东西。我知道我可以使用iobuf.Reader,但如果客户端是使用SSL/TLS,bufio.Reader将从原始的Conn读取,因此tls.Conn中的握手将失败。那么有什么方法可以查看Go中的Conn(类似于C/C++套接字中的MSG_PEEK)?或者,在我从底层Conn中读出前几个字节后创建一个tls.Conn?

sockets - 从 go 中的套接字读取时遇到问题

我正在尝试学习go语言,并且正在编写一个简单的echo服务器。不过,我很难让它发挥作用。funclisten(serverstring){varbuf[]bytelistener,ok:=net.Listen("tcp",server)ifok!=nil{fmt.Fprintf(os.Stderr,"Couldnotlistenonsocket:%s\n",ok.String())return}conn,ok:=listener.Accept()ifok!=nil{fmt.Fprintf(os.Stderr,"Couldnotacceptconnectiononsocket:%s\n"