Heim Backend-Entwicklung Golang Socket-Programmierung und serverseitiges Schreiben in der Go-Sprache

Socket-Programmierung und serverseitiges Schreiben in der Go-Sprache

May 31, 2023 pm 11:40 PM
go语言 socket编程 服务端编写

Mit der rasanten Entwicklung des Internets erfordern immer mehr Anwendungen Netzwerkkommunikation, und die Socket-Programmierung ist zu einer wichtigen Programmiermethode geworden. Die Go-Sprache ist eine Programmiersprache, die in den letzten Jahren viel Aufmerksamkeit erregt hat und auch im Bereich der Netzwerkprogrammierung einzigartige Vorteile bietet. In diesem Artikel werden die Socket-Programmierung in der Go-Sprache und das Schreiben eines einfachen Serverprogramms vorgestellt.

1. Überblick über die Socket-Programmierung

Socket ist eine Abstraktionsschicht zwischen der Anwendungsschicht und der Transportschicht, die es Anwendungen ermöglicht, über das Netzwerk zu kommunizieren. Für die meisten Anwendungen sind Sockets der Ein- und Ausgang der Netzwerkkommunikation. Insbesondere bei der Socket-Programmierung kann ein Socket als ein spezieller Dateityp betrachtet werden. Das Programm kann die Netzwerkkommunikation durchführen, indem es diese „Datei“ liest und schreibt.

Der Kerninhalt der Socket-Programmierung umfasst die folgenden Aspekte:

1. Erstellen Sie einen Socket

Bevor Sie einen Socket erstellen, müssen Sie wissen, welcher eines, das verwendet werden soll. Welches Protokoll: TCP oder UDP. Die Wahl des Protokolls wirkt sich direkt auf nachfolgende Programmiermethoden aus. In der Go-Sprache können Sie die entsprechende Funktion im Netzpaket aufrufen, um einen Socket zu erstellen.

2. Adresse und Port binden

Damit der Client den Server finden kann, muss der Server die Abhöradresse und den Port binden. In der Go-Sprache können Sie die Listen-Funktion im Netzpaket aufrufen, um die Bindung von Adressen und Ports abzuschließen.

3. Auf Client-Verbindungsanfragen warten

Sobald der Server die Adresse und den Port bindet, beginnt er, auf Client-Verbindungsanfragen zu warten. In der Go-Sprache können Sie Goroutine- und Select-Anweisungen kombinieren, um mehrere Sockets gleichzeitig zu überwachen.

4. Client-Anfragen empfangen und verarbeiten

Wenn der Client den Aufbau einer Verbindung anfordert, muss der Server die Accept-Funktion aufrufen, um die Client-Anfrage zu empfangen und an sie zu übergeben der Client Die Sub-Coroutine kümmert sich darum.

5. Senden und Empfangen von Daten

Nachdem der Client und der Server eine Verbindung hergestellt haben, können beide Parteien Daten über Socket senden und empfangen. In der Go-Sprache können Sie die Schreib- und Lesefunktionen im Netzpaket aufrufen, um Daten zu senden und zu empfangen.

2. Serverseitige Programmierung in der Go-Sprache

Nachdem wir die Grundkenntnisse der Socket-Programmierung verstanden haben, können wir mit dem Schreiben serverseitiger Programme beginnen. In diesem Abschnitt wird ein einfaches Echo-Programm als Beispiel verwendet, um vorzustellen, wie man ein Serverprogramm mit der Go-Sprache schreibt.

1. Socket erstellen

In der Go-Sprache können Sie einen Socket erstellen, indem Sie die Listen-Funktion im Netzpaket aufrufen. Der Parameter der Listen-Funktion ist eine Zeichenfolge, die die Adresse und Portnummer darstellt, die wir binden möchten. Wenn Port 0 ist, wird ein freier Port zugewiesen. Der folgende Code zeigt, wie ein TCP-Socket erstellt und an den lokalen Port 8000 gebunden wird.

listener, err := net.Listen("tcp", ":8000")
if err != nil {
    fmt.Println("Error listen:", err)
    return
}
defer listener.Close()
Nach dem Login kopieren

2. Client-Verbindungsanfragen überwachen

Nachdem wir den Socket erstellt haben, müssen wir Client-Verbindungsanfragen kontinuierlich überwachen. In der Go-Sprache können wir eine Endlosschleife verwenden, um die Accept-Funktion kontinuierlich aufzurufen und auf die Verbindungsanforderung des Clients zu warten. Die Accept-Funktion gibt ein Socket-Objekt conn zurück, mit dem der Client eine Verbindung herstellt.

for {
    conn, err := listener.Accept()
    if err != nil {
        fmt.Println("Error accept:", err)
        return
    }
    go handleConnection(conn)
}
Nach dem Login kopieren

3. Verarbeitung von Client-Anfragen

Die Methode zur Verarbeitung von Client-Anfragen wird in einer Sub-Coroutine platziert, sodass Multi-Core-CPUs vollständig genutzt werden können, um die gleichzeitige Verarbeitung zu verbessern Fähigkeiten. In diesem Artikel wird als Beispiel das Echo-Programm verwendet, das die vom Client gesendeten Daten intakt an den Client zurückgibt.

func handleConnection(conn net.Conn) {
    buf := make([]byte, 1024)
    defer conn.Close()
    for {
        n, err := conn.Read(buf)
        if err != nil {
            fmt.Println("Error reading:", err)
            return
        }
        fmt.Println("Received:", string(buf[:n]))
        _, err = conn.Write(buf[:n])
        if err != nil {
            fmt.Println("Error writing:", err)
            return
        }
    }
}
Nach dem Login kopieren

4. Vollständiger Code

Das Folgende ist der Code eines vollständigen Echo-Server-Programms:

package main

import (
    "fmt"
    "net"
)

func main() {
    listener, err := net.Listen("tcp", ":8000")
    if err != nil {
        fmt.Println("Error listen:", err)
        return
    }
    defer listener.Close()

    fmt.Println("Listening on :8000")

    for {
        conn, err := listener.Accept()
        if err != nil {
            fmt.Println("Error accept:", err)
            continue
        }
        fmt.Println("New client connected")
        go handleConnection(conn)
    }
}

func handleConnection(conn net.Conn) {
    buf := make([]byte, 1024)
    defer conn.Close()
    for {
        n, err := conn.Read(buf)
        if err != nil {
            fmt.Println("Error reading:", err)
            return
        }
        fmt.Println("Received:", string(buf[:n]))
        _, err = conn.Write(buf[:n])
        if err != nil {
            fmt.Println("Error writing:", err)
            return
        }
    }
}
Nach dem Login kopieren

Durch den obigen Code können wir sehen In der Go-Sprache ist es sehr einfach, ein einfaches Echo-Server-Programm zu implementieren.

3. Zusammenfassung

In diesem Artikel werden hauptsächlich die Grundkonzepte der Socket-Programmierung und das Schreiben des einfachsten Echo-Serverprogramms in der Go-Sprache vorgestellt. Die Go-Sprache bietet eine sehr einfache und benutzerfreundliche Netzwerkprogrammierschnittstelle, die die Lernkosten und Programmierschwierigkeiten des Programmierers erheblich reduzieren und die Programmiereffizienz und Betriebseffizienz verbessern kann. Für Anwendungen, die Netzwerkkommunikation erfordern, ist die Go-Sprache zweifellos eine sehr gute Wahl.

Das obige ist der detaillierte Inhalt vonSocket-Programmierung und serverseitiges Schreiben in der Go-Sprache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Welche Bibliotheken werden für die Operationen der schwimmenden Punktzahl in Go verwendet? Welche Bibliotheken werden für die Operationen der schwimmenden Punktzahl in Go verwendet? Apr 02, 2025 pm 02:06 PM

In der Bibliothek, die für den Betrieb der Schwimmpunktnummer in der GO-Sprache verwendet wird, wird die Genauigkeit sichergestellt, wie die Genauigkeit ...

Was ist das Problem mit Warteschlangen -Thread in Go's Crawler Colly? Was ist das Problem mit Warteschlangen -Thread in Go's Crawler Colly? Apr 02, 2025 pm 02:09 PM

Das Problem der Warteschlange Threading In Go Crawler Colly untersucht das Problem der Verwendung der Colly Crawler Library in Go -Sprache. Entwickler stoßen häufig auf Probleme mit Threads und Anfordern von Warteschlangen. � ...

Warum hat das Drucken von Saiten mit Println und String () -Funktionen unterschiedliche Effekte? Warum hat das Drucken von Saiten mit Println und String () -Funktionen unterschiedliche Effekte? Apr 02, 2025 pm 02:03 PM

Der Unterschied zwischen Stringdruck in GO -Sprache: Der Unterschied in der Wirkung der Verwendung von Println und String () ist in Go ...

Wie löste ich das Problem des Typs des user_id -Typs bei der Verwendung von Redis -Stream, um Nachrichtenwarteschlangen in GO -Sprache zu implementieren? Wie löste ich das Problem des Typs des user_id -Typs bei der Verwendung von Redis -Stream, um Nachrichtenwarteschlangen in GO -Sprache zu implementieren? Apr 02, 2025 pm 04:54 PM

Das Problem der Verwendung von RETISTREAM zur Implementierung von Nachrichtenwarteschlangen in der GO -Sprache besteht darin, die Go -Sprache und Redis zu verwenden ...

Was ist der Unterschied zwischen 'var' und 'Typ' Typenwort Definition in der GO -Sprache? Was ist der Unterschied zwischen 'var' und 'Typ' Typenwort Definition in der GO -Sprache? Apr 02, 2025 pm 12:57 PM

Zwei Möglichkeiten, Strukturen in der GO -Sprache zu definieren: Der Unterschied zwischen VAR- und Typ -Schlüsselwörtern. Bei der Definition von Strukturen sieht die Sprache oft zwei verschiedene Schreibweisen: Erstens ...

Welche Bibliotheken in GO werden von großen Unternehmen entwickelt oder von bekannten Open-Source-Projekten bereitgestellt? Welche Bibliotheken in GO werden von großen Unternehmen entwickelt oder von bekannten Open-Source-Projekten bereitgestellt? Apr 02, 2025 pm 04:12 PM

Welche Bibliotheken in GO werden von großen Unternehmen oder bekannten Open-Source-Projekten entwickelt? Bei der Programmierung in Go begegnen Entwickler häufig auf einige häufige Bedürfnisse, ...

Was soll ich tun, wenn die benutzerdefinierten Strukturbezeichnungen in Goland nicht angezeigt werden? Was soll ich tun, wenn die benutzerdefinierten Strukturbezeichnungen in Goland nicht angezeigt werden? Apr 02, 2025 pm 05:09 PM

Was soll ich tun, wenn die benutzerdefinierten Strukturbezeichnungen in Goland nicht angezeigt werden? Bei der Verwendung von Goland für GO -Sprachentwicklung begegnen viele Entwickler benutzerdefinierte Struktur -Tags ...

Warum gibt es bei Verwendung von SQL.Open keinen Fehler an, wenn DSN leer ist? Warum gibt es bei Verwendung von SQL.Open keinen Fehler an, wenn DSN leer ist? Apr 02, 2025 pm 12:54 PM

Warum meldet der DSN bei Verwendung von SQL.Open keinen Fehler? In Go Language, Sql.open ...

See all articles