草庐IT

unix-socket

全部标签

sockets - 如何找到 IP :Port of incoming client in TCP Connection

收到来自conn,err:=listener.Accept()的连接后,我想在conn的另一端找到客户端的地址。我已经尝试使用conn.LocalAddr()和conn.RemoteAddr()(Documentation)来执行此操作。.LocalAddr()只是给出服务器进程的地址。.RemoteAddr()为客户端提供了正确的IP,但与我所知道的客户端绑定(bind)的端口号截然不同。如果它有什么不同,我用在同一台机器上运行的两个独立进程来做这件事。一个是客户端,一个是服务器。关于如何找到客户端的正确IP:Port的任何想法?我是要使用LocalAddr还是RemoteAddr?

unix - 从命令行嵌套 JSON 运行 Go

我可以想到如何使它正常工作的变通方法,但是我很想知道是否有针对这个特定问题的解决方案。我有一个需要json字符串参数的go程序:gorunmain.go"{\"field\":\"value\"}"到目前为止没有问题。但是,如果其中一个json值是另一个json字符串,我是否可以从命令行运行?gorunmain.go"{\"json-string\":\"{\"nestedfield\":\"nestedvalue\"}\"}"添加转义字符似乎错误地匹配了开始和结束引号。我是在误解这是如何完成的,还是根本不可能(这是我要反对的一面)?重申一下,这是一个激起我好奇心的问题-我知道有其他方

sockets - 没有可用的缓冲区空间(tcp.cpp :69) when setting SNDBUF and RCVBUF ZeroMQ, golang,MacOSX

我在MacOSX上使用brew安装了zeromq:stable4.1.4,并编写了一个简单的PUB/SUB程序来测试zeromq。但是当我使用标志--bufsize>5运行示例程序时(使用大小>5MB的缓冲区)(去运行go_zmq_pubsub.go--bufsize=6);它抛出以下异常:没有可用的缓冲区空间(tcp.cpp:69)SIGABRT:中止PC=0x7fff9911c286m=0cgo执行时信号到达下面是我用来测试zeromq4.x的程序packagemainimport("fmt""flag""strconv""sync"log"github.com/Sirupsen/

sockets - 如何读取在 Golang 中接收到的 UDP 数据报的输入接口(interface)和远程套接字地址?

PacketConn.ReadFrom()可以为输入接口(interface)提供包含ifIndex的ControlMessage。UDPConn.ReadFromUDP()返回带有数据报的源套接字地址(srcIP+srcPort)的net.UDPAddr。但是,如何同时获取两个信息:输入接口(interface)ifIndexAND远程套接字地址(srcIP+srcPort)?编辑:我已经填写了一个问题:https://github.com/golang/go/issues/14362 最佳答案 当底层套接字是UDP时,.Read

go - 将时间字段编码为 Unix 时间

我想将我的time.Time字段编码为数字Unix时间,我不想为每个结构实现自定义MarshalJSON函数,因为我有很多很多结构。所以,我尝试定义一个类型别名:类型时间戳time.Time并像这样在其上实现MarshalJSON:func(tTimestamp)MarshalJSON()([]byte,error){return[]byte(strconv.FormatInt(t.Unix(),10)),nil}但这给了我一个t.Unixundefined(typeTimestamphasnofieldormethodUnix),这对我来说没有意义。Timestamp不应该“继承”(

sockets - 如何调试以下 Go 代码,它试图与 IP 地址和端口建立 TCP 连接?

我从Bittorrent跟踪器获取特定torrent文件的IP地址和端口号。它代表bittorrent网络上的对等点。我正在尝试使用此代码连接到对等方。连接总是超时(getsockopt:操作超时)。我想我在这里遗漏了一些非常基本的东西,因为我在python中尝试了相同的代码,结果完全相同,操作超时。它发生在每个对等IP地址上。我下载了这个BT客户端-https://github.com/jtakkala/tulva它能够使用这种类型的代码(第245行,peer.go)从我的系统连接到对等点。我还能够使用类似的代码连接到在本地主机上运行的tcp服务器。在JimB的评论和KennyGra

sockets - conn (net.Conn) 并不总是写在套接字上

我已经用服务器和客户端完成了一个应用程序,以使用套接字TCP发送信息问题是,如果函数zfs.ReceiveSnapshot(在服务器端)没有返回错误(err==nil),conn.Write([]byte("0"))不工作,客户端没有收到任何字节继续,它不能关闭连接...我给你看服务器端和客户端的代码服务器:packagemainimport("net""github.com/mistifyio/go-zfs")funcmain(){//Listenforincomingconnectionsl,_:=net.Listen("tcp",":7766")//Closethelistene

sockets - 如何在不阻塞服务器的情况下通过 tcp 向客户端发送数据?

我正在写一个游戏服务器,因为这是我的第一次,我一直想知道如何在不滞后服务器的情况下向客户端发送数据包。即使客户端滞后,也应该向他们发送数据包。(不确定这样做是否正确,但如果我不向他们发送数据包,客户端将不会同步)所以首先我的想法是:每个玩家在连接时都会获得2个goroutines:一个用于发送,另一个用于接收。//intheservermainloopselect{caseplayer.sendChan所以这里服务器的mainloop最多可以无阻塞地向播放器channel发送100个数据包,而sendPacket是阻塞的(可能是由于滞后)。但问题是如果播放器在100个数据包后阻塞,服务

sockets - 如何为 Go 中写入的每个连接发送单独的数据包?

问题我想运行一个每秒有大量请求的负载测试。我在Go中编写了一个套接字发送器和一个接收器。发送方向端口7357发送大量数据包,每个数据包都包含以纳秒为单位的当前时间。接收方在端口7357上监听并解析每条消息,计算延迟。问题是在读取时我在一个conn.Read()中得到了多个数据包。我知道这意味着我实际上每个数据包发送多条消息:每个conn.Write()不发送套接字数据包,但它等待一段时间然后与下一个合并(或接下来的几个)在发送之前。问题如何确保每个conn.Write()都作为单独的数据包通过套接字单独发送?注意:我不想重新发明TCP,我只想模拟来自多个外部实体的负载,每个实体发送一条

sockets - Golang 将 gopacket udpLayer 转换为字节并发送

我正在使用gopacket/layersapi从数据包中提取更新数据,然后通过另一个udp流再次发送它,我不确定这样做是否正确,如果有人可以的话,我也会遇到一些错误给我指出正确的方向,那太好了我的代码conn,err:=net.Dial("udp",1.1.1.1)udp,_:=updpLayer.(*layers.UDP)/*nowifisenditlikethis*/conn.Write(udp)/*igettheerrors:cannotuseudp(type*layers.UDP)astype[]byteinargumenttoconn.Write*//*Itriedtocon