どのように簡単なプログラムを示すために移動し、関係GO APIとLinuxのAPIを分析します。シンプルなソケットなどの概念のように文書化されていません、とBaiduのために何を知りません。
server.go
メインパッケージ
のインポート「ネット」
「FMT」インポート
インポート「BUFIO」
//のみサンプル処理のために以下に必要な輸入「文字列」
メイン(){funcを
(「...起動サーバ」)fmt.Printlnを
//监听端口8081
LN、 _:= net.Listen( "TCP"、 "8081")
//接入
CONN、_:= ln.Accept()
{ための
メッセージ、_:= bufio.NewReader(CONN).ReadString( '\ n'は)
fmt.Print( "受信メッセージ:"、文字列(メッセージ))
//处理一下收到的数据
newmessage:= strings.ToUpper(メッセージ)
//写回到客户端
conn.Write([]バイト(newmessage + "\ n"))
}
}
client.cを
メインパッケージ
のインポート"NET"
インポート"FMT"
インポート"BUFIO"
インポート"OS"
FUNCメイン(){
//サーバーへの接続
= net.Dial( "TCP"、 "127.0.0.1:8081"):コネティカット、_
について{
//データの標準入力ストリームから読み込む
リーダー:= bufio.NewReader(os.Stdin)
fmt.Print( "テキストに送る:")
テキスト、_:= reader.ReadString( '\ N-')
//ソケットへの
fmt.Fprintf(コネティカット、テキスト+ "\ N-")
//書き込みバックモニタデータ・サーバ・
メッセージ、_:= bufio.NewReader(コネチカット州).ReadString( '\ N-')
IFメッセージ== "" {
fmt.Printは(「メッセージクライアントがゼロです」)
ブレーク
}
fmt.Print( "サーバーからのメッセージ:" +メッセージ)
}
}
使用すると、単純なクライアント - サーバ間の言語コミュニケーションを行きます。クライアントは、右がサーバである、残されています。
LinuxのソケットAPIと、外出先APIとの間のリンク
>関連情報は満たされ、その後、機能バインド()を使用し、バインドソケット---> - 非常に簡単で、C言語はソケットを作成するために、C言語から、ステップ数を省略すると比較書き込みネットワークプログラムに言語を行きますその後、ポートをリスニング聞く--->最後に、使用することは、接続を受け付けられます。二つのステップが省略されている、先行する言語を行く、(直接聞く)ポートとバインドされたポートをリスニングして、(受け入れ使用)接続を受け、その後、聞いてC言語とバインドの機能を受け入れ、聞いて、どのようなリンクを受け入れるために行きますそれは。
聴く
画像を表示し、そんなにナンセンスを言ってはいけません!
の図1聞きに行くとLinuxのソケットAPI機能
港区は、このポートでは、あなたが実際にソケットへのソケットとのバインドデータを作成するために、ソケットのLinuxネットワークプログラミングのAPI()を呼び出すために、言語の機能を聞きに行くれる基礎となることを確認することができ、絵を見るために最後のライブモニタ上に、それは非常に便利な、本当に、一挙に3つのことを完了することができます。
コードを読み取り、データを表示すると、非同期通知を使用するのepollソケットに行くことが分かりました。ここでは、実際には、ロジックが明確で、言語はソケットを作成します行くバイ・ステップの最後に、リスニングソケットが順にepollをキューに追加されている方法は、非同期ネットワークを完了するために、バインディングは、監視が完了した、聞いて、使用する方法プログラミング。
受け入れます
図2は、LinuxソケットAPIの機能を受け入れ、行きます
比較すると、我々は非常に簡単にそれを受け入れ、ある上述聞きます。接続が確立されるか、これは私たちのソケットのepollキューに追加されます後、私たちは、この通知の非同期ソケットスレッドを扱う、イベントが来ています。
概要
其实总的来说,不管是JAVA、PHP、还是我们讨论的GO语言,调用来调用去,封装来封装去,到最后还是调用操作系统提供的系统调用来完成我们的工作,而系统调用又需要调用网络驱动程序来完成对网卡或者其他硬件的读和写。套用一句很有名气的话,"计算机世界的所有问题,都可以通过向上一层进行抽象封装来解决"。如果有,那就两层解决。回想我们编程,也正是如此。我们一开始使用面向过程的编程思想,写函数,然后出现了高阶函数,又出现了面向对象的思想,这何尝不是一种我们应用程序员进行的封装呢?