SlideShare a Scribd company logo
1 of 11
TCP/UDP Socket Client間通信
C#福岡 Vol.5 2014/8/7
K.Takahashi
はじめに
• おかげさまでC#勉強会も1年を迎えることが
できました。ありがとうございます。
• C#勉強会と言いつつも毎回結構脱線してる
気もしますが。
• これからはAzure方面も積極的に絡めていき
たいですね(希望)
展望とか展開とか
• 9/20にはふくあずさん、WinTechqさんの誘い
でMSのエバンジェリスト迎えた合同イベントも
やりますよ。
• DotNetのくくりでF#なんかもかじりたいですよ
ね。(でもVBはdisり続けたいですねw)
• 8/20にもふくあずさんの勉強会あるからよろ
しくね。
前提的な話題をざっくりと
• サーバがあるポート番号で待ってる
(SSHなら22とかHTTPなら80とか)
・そこに向けてクライアントが通信する
・Connectした通信の経路が確保される
・あとはその経路を使ってやり取りする
⇒この流れのI/FがSocket
TCPとUDPを例えると
• TCP:Transmission Control Protocol
– 受け取り時にハンコが必要な書留みたいな
– 不在通知は残さないけど再配達に来てくれる
– 再配達の回数やタイムアウトを指定できる
• UDP:User Datagram Protocol
– ポストに放り込んでおわり
– ポストがなくなってたら適当に捨てる
• 当然TCPよりUDPのほうが処理が軽い
• じゃあ、コマンドとか通知系はTCPで
• 間が抜けてもなんとかなるデータはUDPで
(ちなみにFTPなんかは自前でリトライしてます)
FireWall(NAT)
HTTP SV
A.B.C.D:80
AA.B.C.D:80 さま
データくれ
192.168.1.10:80
Router
W.X.Y.Z
AA.B.C.D:80 さま
データくれ
W.X.Y.Z:10325
AA.B.C.D:80 さま
データくれ
W.X.Y.Z:10326
AA.B.C.D:80 さま
データくれ
192.168.1.11:80
NATから外に出る時に任意・一意
のポート番号に振り替える
サーバからの応答はポート番号か
ら逆引きで返送先のローカルPCを
特定するのに使われる
UDPホールパンチング
CTRL SV
UDP:A.B.C.D:200
A.B.C.D:200 さま
お話しようぜ
192.168.1.10:200
A.B.C.D:200 さま
お話しようぜ
W.X.Y.Z:11551
あいつ
W.X.Y.Z:11551で話
せるらしいぜ
TCPで確立
済の通信
W.X.Y.Z:11551さん
やあ、オレオレ
192.168.1.5:200
192.168.1.10:200さん
やあ、オレオレ
K.L.M.N:10856
会話成立!
TCPではSVに送ったら受取通知が
SVから返るので騙せない
UDPはSVから受取通知が返らない
ので他のPCが通信相手になりすま
せる
• サーバ側の受信はこんな感じ
public static ManualResetEvent allDone = new ManualResetEvent(false);
(略)
// Create a TCP/IP socket.
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, receivePort);
Socket listener = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
// Bind the socket to the local endpoint and listen for incoming connections.
listener.Bind(localEndPoint);
listener.Listen(100);
while (bReceiveContinue)
{
// Set the event to nonsignaled state.
allDone.Reset();
if (listener == null) break;
// Start an asynchronous socket to listen for connections.
listener.BeginAccept( new AsyncCallback(AcceptCallback), listener);
// Wait until a connection is made before continuing.
allDone.WaitOne();
}
• UDP送受信はこんな感じ
サーバに自分のUDPデータを送るとTCPで通知(TCPSocket)
サーバに自分のUDPデータを送る(UDPSocket)
※サーバから変換後のUDPポートをTCPで相手に通知
UDPホールパンチングで通信相手からUDPが来るのを待つ
(UDPClient.BeginReceive)
※片方がUHP対策されているルータに守られていることもあるので
両方からホールパンチングを投げ合うと成立しやすい
成立後は通信相手と本ちゃんデータを投げ合う(UDPClient.Send)
最後に
・・・・あんまりC#に特化してなかった気がする

More Related Content

Viewers also liked

Azureでクレジットカード以外の支払方法
Azureでクレジットカード以外の支払方法Azureでクレジットカード以外の支払方法
Azureでクレジットカード以外の支払方法Junji Yamamoto
 
Azureまるっと解説
Azureまるっと解説Azureまるっと解説
Azureまるっと解説Atsushi Kojima
 
Jenkins使ってみた~Windows編~
Jenkins使ってみた~Windows編~Jenkins使ってみた~Windows編~
Jenkins使ってみた~Windows編~Yuta Matsumura
 
JenkinsをJava開発でこんな感じで使っています
JenkinsをJava開発でこんな感じで使っていますJenkinsをJava開発でこんな感じで使っています
JenkinsをJava開発でこんな感じで使っていますToshio Ehara
 
HttpClient詳解、或いは非同期の落とし穴について
HttpClient詳解、或いは非同期の落とし穴についてHttpClient詳解、或いは非同期の落とし穴について
HttpClient詳解、或いは非同期の落とし穴についてYoshifumi Kawai
 
Google CardbordとLeapMotion 〜お手軽VR〜
Google CardbordとLeapMotion〜お手軽VR〜Google CardbordとLeapMotion〜お手軽VR〜
Google CardbordとLeapMotion 〜お手軽VR〜Yutaka Fujisaki
 

Viewers also liked (6)

Azureでクレジットカード以外の支払方法
Azureでクレジットカード以外の支払方法Azureでクレジットカード以外の支払方法
Azureでクレジットカード以外の支払方法
 
Azureまるっと解説
Azureまるっと解説Azureまるっと解説
Azureまるっと解説
 
Jenkins使ってみた~Windows編~
Jenkins使ってみた~Windows編~Jenkins使ってみた~Windows編~
Jenkins使ってみた~Windows編~
 
JenkinsをJava開発でこんな感じで使っています
JenkinsをJava開発でこんな感じで使っていますJenkinsをJava開発でこんな感じで使っています
JenkinsをJava開発でこんな感じで使っています
 
HttpClient詳解、或いは非同期の落とし穴について
HttpClient詳解、或いは非同期の落とし穴についてHttpClient詳解、或いは非同期の落とし穴について
HttpClient詳解、或いは非同期の落とし穴について
 
Google CardbordとLeapMotion 〜お手軽VR〜
Google CardbordとLeapMotion〜お手軽VR〜Google CardbordとLeapMotion〜お手軽VR〜
Google CardbordとLeapMotion 〜お手軽VR〜
 

Similar to Tcpudpクライアント間通信

Webページが表示されるまで
Webページが表示されるまでWebページが表示されるまで
Webページが表示されるまでMasataka Suzuki
 
QtでC++開発環境構築
QtでC++開発環境構築QtでC++開発環境構築
QtでC++開発環境構築You&I
 
スマートスピーカーのバックエンドで Azure を使う方法
スマートスピーカーのバックエンドでAzure を使う方法スマートスピーカーのバックエンドでAzure を使う方法
スマートスピーカーのバックエンドで Azure を使う方法一希 大田
 
Boost.勉強会 #13 @仙台 鳥小屋
Boost.勉強会 #13 @仙台 鳥小屋Boost.勉強会 #13 @仙台 鳥小屋
Boost.勉強会 #13 @仙台 鳥小屋Yuto M
 
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sampleWebRTC SFU mediasoup sample
WebRTC SFU mediasoup samplemganeko
 

Similar to Tcpudpクライアント間通信 (8)

Webページが表示されるまで
Webページが表示されるまでWebページが表示されるまで
Webページが表示されるまで
 
C#で速度を極めるいろは
C#で速度を極めるいろはC#で速度を極めるいろは
C#で速度を極めるいろは
 
C#への招待
C#への招待C#への招待
C#への招待
 
QtでC++開発環境構築
QtでC++開発環境構築QtでC++開発環境構築
QtでC++開発環境構築
 
スマートスピーカーのバックエンドで Azure を使う方法
スマートスピーカーのバックエンドでAzure を使う方法スマートスピーカーのバックエンドでAzure を使う方法
スマートスピーカーのバックエンドで Azure を使う方法
 
Boost.勉強会 #13 @仙台 鳥小屋
Boost.勉強会 #13 @仙台 鳥小屋Boost.勉強会 #13 @仙台 鳥小屋
Boost.勉強会 #13 @仙台 鳥小屋
 
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sampleWebRTC SFU mediasoup sample
WebRTC SFU mediasoup sample
 
WebRTCとSFU
WebRTCとSFUWebRTCとSFU
WebRTCとSFU
 

Recently uploaded

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 

Recently uploaded (11)

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 

Tcpudpクライアント間通信