ソケットプログラミング言語ゴー

ソケットプログラミング

エンドサービスプロセスフロー

  • A。リスニングポート(通常はなぜ、デフォルトは80であるので、非表示)
  • B。クライアントのリンクを受け取ります
  • C。ゴルーチンを作成し、リンク処理

クライアントのプロセスフロー

  • 。リンクサーバー側の確立
  • B。メイクのデータトランシーバ
  • C。閉じるリンク

ネットワークプロトコル

TCP / IPプロトコル

デフォルトでは、できる典型的には4層:リンク層、ネットワーク層、トランスポート層、アプリケーション層

	链路层:处理MAC地址,设备到设备
	网络层:处理IP地址,主机到主机
	传输层:处理数据传输,进程到进程
	应用层:处理应用,应用程序

レイヤーとプロトコル

各層独自のプロトコル
ここに画像を挿入説明

	链路层
		ARP:设备到设备(网卡、MAC),通过ip找mac
	网络层
		ping 172.0.0.1
	传输层
		TCP:文件传输、安全、慢
		UPD:例如聊天相关、不安全、快

知識レビュー

  • NIC:NICは、ネットワークカードのアドレスに識別される - >物理アドレス(MAC)を、ブロードキャストストーム放送を避けるために、IPによると、唯一の現在のローカルネットワークアドレス、MAC内のオブジェクトを見つけるために

梱包および開梱

ここに画像を挿入説明

C / Sモデル

  • クライアント - サービス機械モデル
    ここに画像を挿入説明

サーバーの例

package main

import (
	"fmt"
	"net"
)

func main() {
	// 监听
	listener, err := net.Listen("tcp", "192.0.0.1:8000")
	if err != nil {
		fmt.Println("err:", err)
	}

	defer listener.Close()

	// 阻塞等待用户链接
	conn, err := listener.Accept()
	if err != nil {
		fmt.Println("err:", err)
		return
	}

	// 接受用户的请求
	buf := make([]byte, 1024)
	n, err := conn.Read(buf)
	if err != nil {
		fmt.Println("err:", err)
		return
	}

	fmt.Printf("%s", string(buf[:n]))
}

UEの例

package main

import (
	"fmt"
	"net"
)

func main() {
	// 连接到服务器
	conn, err := net.Dial("tcp", "127.0.0.1:8000")
	if err != nil {
		fmt.Println("err:", err)
		return
	}

	defer conn.Close()

	// 发送数据
	conn.Write([]byte("Are you ok?"))

}

公開された34元の記事 ウォン称賛17 ビュー4874

おすすめ

転載: blog.csdn.net/weixin_44879611/article/details/104201577
おすすめ