![](/img/trans.png)
[英]How to connect python socket client side to server socket with url?
[英]Go Client Connect to an URL with Socket
我是 Go 的新手。 我有一台運行 FastAPI Python 的服務器。 我已經在127.0.0.1:8000/register 中運行了 websocket 請求。
@app.websocket("/register")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
while True:
data = await websocket.receive_text()
await websocket.send_text(f"Message text was: {data}")
我想通過 Go 創建一個作為客戶端工作的應用程序。 此應用程序使用套接字連接到此 URL 並發送信息以創建帳戶。 但是當我嘗試在 google 中使用示例代碼時:
package main
import "net"
import "fmt"
import "bufio"
import "os"
import "log"
func main() {
// connect to server
conn, err := net.Dial("tcp", "127.0.0.1:8000/register")
if err != nil {
log.Println(err)
}
for {
// what to send?
reader := bufio.NewReader(os.Stdin)
fmt.Print("Text to send: ")
text, err := reader.ReadString('\n')
if err != nil {
log.Println(err)
}
// send to server
fmt.Fprintf(conn, text + "\n")
// wait for reply
message, err := bufio.NewReader(conn).ReadString('\n')
if err != nil {
log.Println(err)
}
fmt.Print("Message from server: "+message)
}
}
由於dial tcp: lookup tcp/8000/register: getaddrinfow: The specified class was not found
無法正常工作dial tcp: lookup tcp/8000/register: getaddrinfow: The specified class was not found
據我所知,它無法查找此鏈接,它只會在它是 IP 地址時查找。 如何創建對 URL 的 Socket 請求?
使用 github.com/gorilla/websocket 示例:
package main
import (
"flag"
"log"
"net/url"
"os"
"os/signal"
"time"
"github.com/gorilla/websocket"
)
var addr = flag.String("addr", "127.0.0.1:8080", "http service address")
func main() {
flag.Parse()
log.SetFlags(0)
interrupt := make(chan os.Signal, 1)
signal.Notify(interrupt, os.Interrupt)
u := url.URL{Scheme: "ws", Host: *addr, Path: "/register"}
log.Printf("connecting to %s", u.String())
c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
if err != nil {
log.Fatal("dial:", err)
}
defer c.Close()
done := make(chan struct{})
go func() {
defer close(done)
for {
_, message, err := c.ReadMessage()
if err != nil {
log.Println("read:", err)
return
}
log.Printf("recv: %s", message)
}
}()
ticker := time.NewTicker(time.Second)
defer ticker.Stop()
for {
select {
case <-done:
return
case t := <-ticker.C:
err := c.WriteMessage(websocket.TextMessage, []byte(t.String()))
if err != nil {
log.Println("write:", err)
return
}
case <-interrupt:
log.Println("interrupt")
// Cleanly close the connection by sending a close message and then
// waiting (with timeout) for the server to close the connection.
err := c.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""))
if err != nil {
log.Println("write close:", err)
return
}
select {
case <-done:
case <-time.After(time.Second):
}
return
}
}
}
或 nhooyr.io/websocket - 是用於 Go https://github.com/nhooyr/websocket的最小且慣用的 WebSocket 庫
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
defer cancel()
c, _, err := websocket.Dial(ctx, "ws://localhost:8080/register", nil)
if err != nil {
// ...
}
defer c.Close(websocket.StatusInternalError, "the sky is falling")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.