0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Qiita全国学生対抗戦Advent Calendar 2024

Day 16

goで作る、telnet電子広告サーバー

Last updated at Posted at 2024-12-15

今回は、接続してきたクライアントの順番(何人目の接続か)を追跡する機能を追加してみます。
これにより、各クライアントに「あなたは○○人目の接続者です」といったメッセージを送信できます。

実装の変更点

  • 接続者数を管理するために、サーバー側でカウンターを設置します。
  • 各クライアントが接続した際に、その順番を送信します。

以下はtelnet電子広告サーバーの基本的なコード例です:

package main  

import (  
    "fmt"  
    "net"  
    "sync"  
    "time"  
)  

var connectionCount int  
var mu sync.Mutex  // 同時アクセスを防ぐためのミューテックス  

func main() {  
    listener, err := net.Listen("tcp", ":8080")  
    if err != nil {  
        fmt.Println("Error starting server:", err)  
        return  
    }  
    defer listener.Close()  
    fmt.Println("Server started on port 8080")  

    for {  
        conn, err := listener.Accept()  
        if err != nil {  
            fmt.Println("Connection error:", err)  
            continue  
        }  

        // 接続順番を追跡  
        mu.Lock()  
        connectionCount++  
        clientNumber := connectionCount  
        mu.Unlock()  

        go handleConnection(conn, clientNumber)  
    }  
}  

func handleConnection(conn net.Conn, clientNumber int) {  
    defer conn.Close()  

    // 接続順番を伝えるメッセージ  
    welcomeMessage := fmt.Sprintf("あなたは%d人目の接続者です!\n", clientNumber)  
    conn.Write([]byte(welcomeMessage))  

    messages := []string{  
        "Profile:",  
        "MailAdress",  
    }  

    for {  
        for _, msg := range messages {  
            conn.Write([]byte(msg + "\n"))  
            time.Sleep(5 * time.Second)  
        }  
    }  
}  

変更点の説明

  1. connectionCount:接続してきたクライアントの順番を追跡するために、グローバル変数としてカウントします。
  2. mu (ミューテックス):複数の接続が並行して進行するため、connectionCountへのアクセスを同期させるためにミューテックスを使っています。
  3. clientNumber:接続順番をカウントして、各クライアントにその情報を送信します。

実行方法

  1. 上記のコードをmain.goという名前で保存します。
  2. 以下のコマンドを実行してサーバーを起動します:
go run main.go  
  1. 別のターミナルで以下のコマンドを使用してtelnetクライアントを起動します:
telnet localhost 8080  
  1. クライアントに「あなたは○○人目の接続者です!」というメッセージが表示され、その後、広告が定期的に表示されることを確認してください。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?