2017-04-23 4 views
0

I un serveur TCP simple qui accepte la connexion, obtenir une URL en utilisant http.Get, puis encoder la réponse en utilisant gob. Mais gob ne parvient pas à encoder http.gzipReader. sur le codage lui donne message d'erreur suivant:gob: type non enregistré pour l'interface: http.gzipReader

gob: type not registered for interface: http.gzipReader 

Mon code est donné ci-dessous:

package main 
import (
    "encoding/gob" 
    "fmt" 
    "log" 
    "net" 
    "net/http" 
    "os" 
) 
const (
    CONN_HOST = "localhost" 
    CONN_PORT = "3333" 
    CONN_TYPE = "tcp" 
) 

func main() { 
    // Listen for incoming connections. 
    l, err := net.Listen(CONN_TYPE, CONN_HOST+":"+CONN_PORT) 
    if err != nil { 
     fmt.Println("Error listening:", err.Error()) 
     os.Exit(1) 
    } 
    for { 
     conn, err := l.Accept() 
     if err != nil { 
      fmt.Println("Error accepting: ", err.Error()) 
      os.Exit(1) 
     } 
     go handleRequest(conn) 
    } 
} 
func handleRequest(conn net.Conn) { 
    res, err := 
     http.Get("http://info.cern.ch/hypertext/WWW/TheProject.html") 
    if err != nil { 
     log.Fatal(err) 
    } else { 
     encoder := gob.NewEncoder(conn) 
     er := encoder.Encode(res) 
     if er != nil { 
      fmt.Println(er) 
     } 
    } 
    conn.Write([]byte("Message received.")) 
    conn.Close() 
} 

Est-il possible d'encoder http.gzipReaderc ?? J'ai vu un exemple de gob.Register(), mais j'essaie de registrer http.gzipReaderc. Mais incapable de le faire. quelqu'un peut-il me proposer une solution à ce problème?

+1

J'ai reçu cette erreur: 'gob: type non enregistré pour l'interface: http.bodyEOFSignal'. Êtes-vous sûr de vouloir encoder toute la partie de ['http.Response'] (https://golang.org/pkg/net/http/#Response)? Le contenu (page HTML) de la réponse 'http.Get' est disponible via le champ' Body' (qui est une interface et les données elles-mêmes ne sont peut-être pas disponibles immédiatement ou peuvent être encodées dans gzip etc.) et vous devriez le lire en premier dans un tampon (ou créer un wrapper) puis en le passant à l'encodeur de gob. – putu

Répondre