省略網袋を行きます

 

TCPサーバ

すべての言語はゴルーチン並行性と効率的なを使用することは非常に簡単、に対処するためのゴルーチンを作成するためのリンクを確立することができます行きます。

処理手順の一般的な流れは、TCPサーバーは、
ソケットを作成してバインド1:まず、サーバソケット()関数は、ネットワークソケット、その後、バインド()関数を作成し、ソケットがバインドされているIPポートを指定し使用します。

リクエスト2.リッスン:次に、IPとポートをバインドするクライアントの要求に耳を傾けるために聞く()関数を使用してサーバー。

3.接続を受信:接続を確立するために成功した3ウェイハンドシェイクを超えると通じ要求があった場合、受け入れる()関数は、リンクを受け取り使用します。

機能がクライアントによって送信されたサーバ要求データ接続から確立上記、及び、書き込み()関数によって処理され、クライアントに応答データを送信してきた()を読み出す読み出し:ハンドルゴルーチンへのリンクを作成4.

TCPクライアント一般的なプロセスフロー
1.確立ソケット:同じソケットを使用して、クライアント()関数は、ネットワークソケットを作成します。

2.接続を確立します:接続は:その後、指定されたサーバーのネットワークプログラムとの接続を確立するためにIPとポート番号を着信接続()関数を呼び出します。

前記送信要求受信応答:接続が確立された後、クライアントは、サーバへの書き込みデータを介して送信する()関数ができ、リードを使用して()関数は、サーバからの応答を受信します。

TCPサーバ

メインパッケージ

のインポート(
	"FMT" 
	"ログ" 
	"NET" 

FUNC chkError(ERRエラー){ 
	ERR = nilのIF {!
		log.Fatal(ERR); 
	} 
} 

FUNCメイン(){ 
	// TCPサーバーの作成
	tcpaddrを、 ERR:= net.ResolveTCPAddr( "tcp4"、 "127.0.0.1:8081"); 
	chkError(ERR); 
	//リスニングポート
	tcplisten、ERR2:= net.ListenTCP( "TCP"、tcpaddr); 
	chkError(ERR2)。
	fmt.Println( "スタートサーバ")
	//とリンクとの契約を確立する。
	ゴーFUNC(){ 
		のための{ 
			//クライアントのリンク上であれば、戻ります阻止
			ERR、CONN:= tcplisten.AcceptTCP()
			ERR = nilのIF! { 
				fmt.Println( "ERR同意"、ERR) 
				継続 
			}
			//リンクは、クライアントで確立されている取扱事業
			ゴーFUNC(){ 
				{用
					BUF:=メイク([]バイト、512)
					CNT、ERR:= conn.Read(BUF)
					!=無記号{IF ERR 
						fmt.Println( "ERRのrecv BUF"、ERR)が
						続行
					} 
					//エコー
					IF _、ERR = conn.Write(BUF![:CNT]); ERR =ゼロ{ 
						fmt.Println( "BAK ERR BUF書き込み"、ERR)
						継続
					} 
				} 
			}()
		} 
	}()
	//遮断状態
	SELECT {} 
}

TCPクライアント

以下のための主要なパッケージ変更

のインポート(
	"FMT" 
	"NET" "時間" 

FUNCメイン(){ 
	//リンクを作成します。1つのリンク、リモートサーバ、リンクCONNを得る。
	CONN、ERR:= net.Dial( "TCP"、「127.0.0.1 :8081 ")
	= nilの{IF ERR!
		fmt.Println(" ERRクライアントを起動し、終了「)!
		リターン
	} 
	I:= 1 
	{のために
		。//書き込み2書き込みデータリンクコール
		_、ERR:= conn.Write([ ]バイト(fmt.Sprintf( "%のS:%のD"、 "サーバーこんにちは"、I)))
		= nilの{IF ERR!
			fmt.Println( "書き込みコネティカットERR"、ERR)
			リターン
		} 

		BUF:メイク=([ ]バイト、512)
		CNT、ERR = conn.Read(BUF)
		!IF ERR =ゼロ{ 
			fmt.Println( ")「ERR bufを読んで
			復帰 
		}
		fmt.Printf( "サーバー・コールバック:%S、CNT =%D \ n"は、BUF、CNT)
		I ++ 
		time.Sleep(1)
	}

  

 

おすすめ

転載: www.cnblogs.com/-wenli/p/12321196.html
おすすめ