以下の内容はhttps://tech-up.hatenablog.com/entry/2018/12/22/165815より取得しました。


TCP write【Go】

HTTPで動作するサーバーを作成するため、
TCPサーバーを、標準パッケージのnet packageを使って作成します。

TCPはサーバーとクライアント間の接続を事前に確立し、
通信相手ごとに通信の状態を管理します。
それゆえに信頼性は高いですが、コストのかかる通信方式です。

TCPに対してUDPという通信方式(プロトコル)があります。
UDPは事前処理や通信中の状態確認を行わないため、
通信コストが低く、遅延の少ないのが特徴です。

TCPサーバー作成の大まかな流れは
1. Listen
2. Accept
3. Write, Read
です。

サーバーはクライアントからの接続要求を待機します(Listen)。
接続要求があると、サーバーはそれを受け付けます(Accept)。
これによって、サーバーとクライアントの間に仮想的な接続(バーチャルサーキット)が作られます。
このバーチャルサーキットを通して、双方向でやり取りをします(Write, Read)。
バーチャルサーキットへのデータ送信では、データがそのまま反対側に転送されるため、
パケットロスなどの障害を考える必要がなく、書き込みと読み込みを行うことができます。

goプログラムによってTCPサーバーを作成し、
クライアントの役割として、ターミナルからtelnetという外部のコンピュータを遠隔操作するためのプロトコルを使用し、通信を行います。

main.goです。
io.WriteString、fmt.Fprintを使って書き込みを行います。
※ループを抜ける処理に関する記述がないため、
実行した後、プログラムを終了する場合はCtrl + Cを押下します。

li, err := net.Listen("tcp", ":8080")    // tcpのnetworkのポート8080を監視する
if err != nil {
    log.Panic(err)
}
defer li.Close()    // プログラムが終了したら閉じる

for {
    conn, err := li.Accept()    // 接続要求があれば、それを受け付ける
    if err != nil {
        log.Println(err)
    }

    io.WriteString(conn, "\nHello from TCP server\n")    // 確立したconnectionに対し、書き込みを行う
    fmt.Fprintln(conn, "How is your day?")    // 確立したconnectionに対し、書き込みを行う
    fmt.Fprintf(conn, "%v", "Well, I hope!\n")    // 確立したconnectionに対し、書き込みを行う

    conn.Close()    // connectionを閉じる
}


上記を実行したら、ターミナルからtelnetを実行します。

$ telnet localhost 8080    // localhostのポート8080に接続する


すると、次の結果が返ってきます。

Hello from TCP server
How is your day?
Well, I hope!





以上の内容はhttps://tech-up.hatenablog.com/entry/2018/12/22/165815より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14