草庐IT

socket_handle

全部标签

error-handling - Go 中如何指定和处理特定的错误?

我编写了这个通过RedditJSON的非常基本的解析器,我很好奇我如何专门管理Go中的错误。例如,我有一个链接的“获取”方法:funcGet(redditstring)([]Item,error){url:=fmt.Sprintf("http://reddit.com/r/%s.json",reddit)resp,err:=http.Get(url)iferr!=nil{returnnil,err}deferresp.Body.Close()ifresp.StatusCode!=http.StatusOK{returnnil,err}/**Othercodehere*/}我如何处理来自

sockets - 使用 select 进行非阻塞读取

假设我们有以下服务器抽象(XMPP,但在这里它并不重要):typeServerstruct{AddrstringConnnet.ConntlsCon*tls.ConnR*bufio.ReaderSSLboolreaderchanstring}还有一个辅助函数来初始化它:funccreateServer(domainstring)(s*Server,errerror){conn,err:=net.Dial("tcp",domain+":5222")iferr!=nil{returnnil,err}s=&Server{domain,conn,nil,bufio.NewReader(conn

sockets - 使用 golang 将 JSON 发送到 unix 套接字

我正在尝试编写一个golang程序来通过向运行在/tmp/mpvsocket的unix套接字发出命令来控制mpv。这是我到目前为止尝试过的:funcmain(){c,err:=net.Dial("unix","/tmp/mpvsocket")iferr!=nil{panic(err)}deferc.Close()_,err=c.Write([]byte(`{"command":["quit"]}`))iferr!=nil{log.Fatal("writeerror:",err)}}这应该会导致mpv退出但没有任何反应。可以通过命令行发出此命令以获得预期的结果:echo'{"comman

sockets - 在 Golang 中,如何接收套接字绑定(bind)到特定地址/端口的多播数据包?

手头的任务是专门绑定(bind)一个套接字到地址1.0.0.2:520(分配给eth2),然后读取地址为224.0.0.9:520的多播UDP数据包。我正在尝试下面的代码,基于https://godoc.org/golang.org/x/net/ipv4不幸的是,结果是永远不会收到此调试消息:log.Printf("udpReader:recv%dbytesfrom%sto%son%s",n,cm.Src,cm.Dst,ifname)我知道eth2正在接收所需的数据包,因为我在上面运行了这个数据包嗅探器:sudotcpdump-n-ieth218:40:28.571456IP1.0.0

api - Golang - API Server 和 Socket 同时存在

我尝试制作套接字来与我的客户通信。在对我的API发出一些请求后,将创建一个套接字。这意味着,客户端连接自己(仅通过请求),但随后他加入了聊天,因此创建了一个套接字并将其链接到良好的channel。我已经使用过套接字,所以我了解它是如何工作的(C、C++、C#、Java),但是我想做的,根据我在网上看到的,我认为这是可能的,但我不明白如何用golang处理它。我创建第一个服务器:funcmain(){r:=mux.NewRouter()r.HandleFunc("/",HomeHandler)r.HandleFunc("/products",ProductsHandler)r.Handl

sockets - 转到 : socket library to get hostname

在Go中是否有与python套接字库等效的东西?https://docs.python.org/2/library/socket.html我想在Go中做这样的事情:importsocketip=socket.gethostbyname(domain+".multi.surbl.org")#TranslateahostnametoIPv4addressformat.我可以使用什么包在Go中执行此操作?谢谢! 最佳答案 netnamespace包含将主机名转换为IP地址的方法(以及一些类似于Pythonsocket命名空间中的其他调用)

error-handling - 返回结构时的错误处理

据我所知(来自here和阅读standerd库),在返回数据和错误的库中处理错误的惯用方式。问题是,当我确实运行时必须返回一个错误,我应该返回什么作为我的数据?空结构?0?举个例子//LoadtheconfigfuncLoadConfig(locationstring)(Config,error){//ReadthefileconfigFile,err:=ioutil.ReadFile(location)iferr!=nil{returnConfig{},err}//ConvertittoConfigstructvarconfigConfigjson.Unmarshal(configF

sockets - 我需要一个用于套接字的写缓冲区吗?

假设我在Linux中有一个Tcp服务器,它会为一个新的连接创建一个新的goroutine。当我想向tcp连接写入数据时,是不是应该这样写conn.Write(data)或者在goroutine中做,特别是为了写作,像这样funcwriteRoutine(sendChanchan[]byte){for{select{casemsg:=以防网络繁忙。简而言之,在写入套接字时,我是否需要像在c/c++中一样在go中写入缓冲区?PS可能是我没把问题说清楚。1我说的是服务器,意思是运行在linux中的tcp服务器。它将为新的连接创建一个新的goroutine。像这样listener,err:=n

sockets - golang 将套接字附加到 Stdin/Stdout

将套接字附加到标准输入/标准输出的最佳方法是什么。我知道我们可以将stdin/Stdout重定向到任何文件描述符,但是我们如何对套接字做同样的事情。(比如socat的工作原理)? 最佳答案 好吧,Go中的套接字类型实现了io.Writer接口(interface),而os.Stdin实现了io.Reader,所以我的第一个猜测是尝试bufio.Writer。它可能看起来像:packagemainimport("bufio""os")funcmain(){socket:=getSocket()//leftasanexercisefor

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