recherche
Maisondéveloppement back-endGolangMise en réseau : votre premier serveur et client TCP/IP en Go

Networking : Your First TCP/IP Server and Client in Go

? Ce que nous apprendrons

Dans ce didacticiel, nous démystifierons la programmation réseau en créant un serveur et un client TCP/IP simples mais robustes. Si vous vous êtes déjà demandé comment les applications communiquent sur un réseau, ce guide est fait pour vous !

? Conditions préalables

  • Connaissances de base en programmation Go
  • Curiosité pour le réseautage
  • Un éditeur de texte
  • Allez installé sur votre ordinateur
  • Module Go ajouté (utilisez go mod init tcpIp)

? Comprendre la communication réseau

Avant de plonger dans le code, décomposons ce qui se passe lorsque deux ordinateurs parlent :

  1. TCP/IP : Pensez-y comme à un appel téléphonique

    • TCP (Transmission Control Protocol) : garantit que les messages sont livrés dans leur intégralité et dans l'ordre
    • IP (Internet Protocol) : aide à acheminer les messages vers le bon appareil
  2. Rôles serveur et client :

    • Serveur : attend et écoute les connexions entrantes
    • Client : Initie le contact et envoie les demandes

?️ Structure du projet

tcp-chat-app/
├── server/
│   └── server.go   # Server-side logic
├── client/
│   └── client.go   # Client-side logic
└── main.go         # Starts both server and client

? Étape 1 : Création du serveur

Comprendre le code du serveur

package server

import (
    "log"
    "net"
)

// StartServer: Our digital receptionist 
func StartServer() {
    // Choose a "phone number" (address)
    address := "localhost:8080"

    // Set up a "phone line" to listen for calls
    listener, err := net.Listen("tcp", address)
    if err != nil {
        log.Fatalf("Couldn't set up the phone line: %v", err)
    }
    defer listener.Close()

    log.Printf("Server is ready, waiting for connections on %s", address)

    // Forever wait for incoming "calls"
    for {
        // Accept a new connection
        conn, err := listener.Accept()
        if err != nil {
            log.Printf("Missed a call: %v", err)
            continue
        }

        // Handle each "caller" in a separate conversation
        go handleClient(conn)
    }
}

Concepts clés expliqués

  • net.Listen() : Crée un « socket » réseau pour recevoir les connexions
  • Listener.Accept() : attend et accepte les connexions entrantes
  • go handleClient(conn) : gère chaque client dans un thread séparé (goroutine)

? Gestion des connexions client

func handleClient(conn net.Conn) {
    // Always clean up after the conversation
    defer conn.Close()

    log.Printf("New client connected: %s", conn.RemoteAddr())

    // Prepare a message buffer
    buffer := make([]byte, 1024)

    // Keep the conversation going
    for {
        // Read message from client
        n, err := conn.Read(buffer)
        if err != nil {
            log.Printf("Connection error: %v", err)
            return
        }

        // Echo the message back
        message := string(buffer[:n])
        log.Printf("Received: %s", message)
        conn.Write([]byte("Server says: " + message))
    }
}

Que se passe-t-il ici ?

  • buffer : Un stockage temporaire pour les messages entrants
  • conn.Read() : reçoit les messages du client
  • conn.Write() : renvoie des messages au client

?️ Étape 2 : Création du client

package client

import (
    "bufio"
    "fmt"
    "log"
    "net"
    "os"
)

func StartClient() {
    // Dial the server (like making a phone call)
    conn, err := net.Dial("tcp", "localhost:8080")
    if err != nil {
        log.Printf("Could not connect to server: %v", err)
        return
    }
    defer conn.Close()

    fmt.Println("Connected to server. Start chatting!")

    // Read user input and send to server
    scanner := bufio.NewScanner(os.Stdin)
    for {
        fmt.Print("> ")
        if !scanner.Scan() {
            break
        }

        message := scanner.Text()
        if message == "exit" {
            break
        }

        // Send message to server
        conn.Write([]byte(message + "\n"))

        // Wait for server's response
        response := make([]byte, 1024)
        n, err := conn.Read(response)
        if err != nil {
            log.Printf("Error receiving response: %v", err)
            break
        }

        fmt.Println(string(response[:n]))
    }
}

Mécanismes clients

  • net.Dial() : Connectez-vous au serveur
  • scanner.Scan() : Lire la saisie au clavier de l'utilisateur
  • conn.Write() : envoyer un message au serveur
  • conn.Read() : recevoir la réponse du serveur

? Rassembler tout cela : main.go

package main

import (
    "time"
    "tcpIp/server"
    "tcpIp/client"
)

func main() {
    // Start server in background
    go func() {
        server.StartServer()
    }()

    // Give server a moment to start
    time.Sleep(time.Second)

    // Launch client
    client.StartClient()
}

?‍♂️ Exécuter votre application réseau

go run main.go

? Ce que vous avez appris

  1. Concepts de base de la communication réseau
  2. Créer un serveur TCP dans Go
  3. Connexion d'un client au serveur
  4. Gérer les connexions réseau en toute sécurité
  5. Gestion des erreurs de base en programmation réseau

? Améliorations potentielles

  • Authentification
  • Support client multiple
  • Gestion robuste des erreurs
  • Cryptage

? Ressources

  • Documentation du package Go's net
  • Bases du protocole TCP/IP
  • Programmation simultanée en Go

Références

Administración.(2023, 9 août). Apprenez TCP/IP avec le guide gratuit de commutation et de routage pour tous. Cursin. https://cursin.net/en/learn-tcp-ip-with-the-free-switching-and-routing-guide-for-everyone/

Woodbeck, A. (2021). Programmation réseau avec Go. No Starch Press, Inc.

Bon réseautage ! ??

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Utilisation de l'initialisation init pour l'initialisation du package en GoUtilisation de l'initialisation init pour l'initialisation du package en GoApr 24, 2025 pm 06:25 PM

Dans GO, la fonction INIT est utilisée pour l'initialisation du package. 1) La fonction INIT est automatiquement appelée lors de l'initialisation du package et convient pour initialiser les variables globales, définir les connexions et charger des fichiers de configuration. 2) Il peut y avoir plusieurs fonctions d'initiation qui peuvent être exécutées dans l'ordre des fichiers. 3) Lorsque vous l'utilisez, l'ordre d'exécution, la difficulté de test et l'impact des performances doivent être pris en compte. 4) Il est recommandé de réduire les effets secondaires, d'utiliser l'injection de dépendance et l'initialisation de retard pour optimiser l'utilisation des fonctions d'initié.

Énoncé de sélection de Go: Multiplexage des opérations simultanéesÉnoncé de sélection de Go: Multiplexage des opérations simultanéesApr 24, 2025 pm 05:21 PM

Go'SelectStatementsTreamlinesConcurrentProgrammingyMultiplexingOperations.1)

Techniques de concurrence avancées en Go: contexte et groupes d'attenteTechniques de concurrence avancées en Go: contexte et groupes d'attenteApr 24, 2025 pm 05:09 PM

ContextandWaitGroupSaRucialialingOgormaninggoroutinesesectively.1) ContextAllowssignalingcancellation andDeadlinesAcrossapiboundaries, assurant que vous êtes en train de vous assurer

Les avantages de l'utilisation de GO pour l'architecture des microservicesLes avantages de l'utilisation de GO pour l'architecture des microservicesApr 24, 2025 pm 04:29 PM

GOISBENEFICIALFORESSERSERVICESSUETOITSSIMPLICITY, EFFICY, AndrobustConcurrencySupport.1) Go'sdesignicemphasizesIMPLICYAndAfficiency, IdealformricroServices.2)

Golang contre Python: les avantages et les inconvénientsGolang contre Python: les avantages et les inconvénientsApr 21, 2025 am 12:17 AM

GolangisidealforBuildingsCalableSystemsDuetoitSefficiency and Concurrency, tandis que les Implicites de l'Indrecosystem et le Golang'sDesignenCourageSlecElNCORES

Golang et C: concurrence vs vitesse bruteGolang et C: concurrence vs vitesse bruteApr 21, 2025 am 12:16 AM

Golang est meilleur que C en concurrence, tandis que C est meilleur que Golang en vitesse brute. 1) Golang obtient une concurrence efficace par le goroutine et le canal, ce qui convient à la gestion d'un grand nombre de tâches simultanées. 2) C Grâce à l'optimisation du compilateur et à la bibliothèque standard, il offre des performances élevées près du matériel, adaptées aux applications qui nécessitent une optimisation extrême.

Pourquoi utiliser Golang? Avantages et avantages expliquésPourquoi utiliser Golang? Avantages et avantages expliquésApr 21, 2025 am 12:15 AM

Les raisons du choix de Golang comprennent: 1) des performances de concurrence élevées, 2) un système de type statique, 3) un mécanisme de collecte des ordures, 4) des bibliothèques et des écosystèmes standard riches, ce qui en fait un choix idéal pour développer des logiciels efficaces et fiables.

Golang vs C: Performance et comparaison de la vitesseGolang vs C: Performance et comparaison de la vitesseApr 21, 2025 am 12:13 AM

Golang convient au développement rapide et aux scénarios simultanés, et C convient aux scénarios où des performances extrêmes et un contrôle de bas niveau sont nécessaires. 1) Golang améliore les performances grâce à des mécanismes de collecte et de concurrence des ordures, et convient au développement de services Web à haute concurrence. 2) C réalise les performances ultimes grâce à la gestion manuelle de la mémoire et à l'optimisation du compilateur, et convient au développement du système intégré.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

Télécharger la version Mac de l'éditeur Atom

Télécharger la version Mac de l'éditeur Atom

L'éditeur open source le plus populaire

MinGW - GNU minimaliste pour Windows

MinGW - GNU minimaliste pour Windows

Ce projet est en cours de migration vers osdn.net/projects/mingw, vous pouvez continuer à nous suivre là-bas. MinGW : un port Windows natif de GNU Compiler Collection (GCC), des bibliothèques d'importation et des fichiers d'en-tête librement distribuables pour la création d'applications Windows natives ; inclut des extensions du runtime MSVC pour prendre en charge la fonctionnalité C99. Tous les logiciels MinGW peuvent fonctionner sur les plates-formes Windows 64 bits.

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Version Mac de WebStorm

Version Mac de WebStorm

Outils de développement JavaScript utiles