SlideShare a Scribd company logo
1 of 33
Download to read offline
ソケット
                            さきら  (@sakira)
              Titanium  Nagoya  Chatroom  #02,  2012.03.24




12年3月24日土曜日
自己紹介
          さきら  (@sakira)
          最近はiPhone,  iPadとかAndroid向けのアプリ
          書いたり、




          本を書いたりしてます。

12年3月24日土曜日
自己紹介

          さきら  (@sakira)
          今は名古屋の会社でエンジニアやってます。
          もともとは近距離離無線通信とか組み込みの会社

          やっぱりiPadとかAndroidとかiPhoneとかの
          アプリ書いたり、解析したりとか。
              で、「何かと通信させるお仕事」が多かったり
          JavaScript勉強中。テヘヘッ(*゚ー゚)>


12年3月24日土曜日
おしながき


          TCPソケットって何?  便利なの?
          TCPソケットってどうやって動くの?
          TCPソケットってどうやって使うの?
          TCPソケット使って何したの?




12年3月24日土曜日
ソケット?  おいしいの?




12年3月24日土曜日
スマートフォンでの通信って

          スマートフォンで扱う通信と言えば…
              インターネット上のサーバ
              サーバでのプログラミングの話
              サーバのリソース管理の話
              XML,  JSONの扱い方
              Ti.Network.HTTPClient
              とかとか…

12年3月24日土曜日
「ソケットといっしょ…」

          今日はTCP/IPをじかに扱います
              「じかに扱う」って?
              TCP/IP自身は皆さん毎日使ってます
               インターネット使ってればそりゃもう!

              例えばHTTPとの関係は?
                     ※詳しくは次のページへ

12年3月24日土曜日
「TCP」
                         OSI参照モデル
         アプリケーション層         HTTP、DHCP、SMTP、FTPとか

        プレゼンテーション層             SMTP、FTPとか

               セッション層             TLSとか

              トランスポート層          TCP、UDPとか

              ネットワーク層         IP、ARP、ICMPとか

              データリンク層          イーサネットとか

                物理理層           無線、光ケーブル

      縁の下の力持ち的な何か。 (wikipediaから引用)
12年3月24日土曜日
「TCPにライバル。」
                       TCP          HTTP

              上下関係      基礎          応用

              仕組み       単純        ちょっと複雑?

                                 便利に使えるように
              OS支援     ふつう?        なってる

       外部ライブラリ       あんまり聞かない     いっぱいある

       クロスプラット
        フォーム           OK           OK
       プログラマから
         見て            面倒…        かんたん!
                             TCP、いいとこないじゃん…
                                    orz
12年3月24日土曜日
「なまTCPはすごかった。」(1)

          TCPは「縁の下の力持ち」だけじゃない!
              いっぺん繋がってしまえば、
              サーバとクライアント関係なし
              LANにつながるモノなら、
              どんなものでもサポートしてる
              マイコンとかとも簡単に通信できるヨ!
              スマートフォン同士で通信できるよ
          生TCPちゃんは、やればでできるコなんです!
              はちゃんと使って



12年3月24日土曜日
「なまTCPはすごかった。」(2)

          なまTCPのソケットはおいしいのです
          iPhoneとAndroidの直接通信だって
          カンタン!
              そう、Titanium Mobileならばね!

          つないでからはサーバとクライアントは
          関係ないけど
          つながるまではサーバとクライアントは
          意識しないといけません。

12年3月24日土曜日
TCPソケットの処理




12年3月24日土曜日
「困ります、生ソケット。」

          TCPはネットワークの基礎
          スマートフォンで  生のままTCP使うことが
          想定されていない
              通信の仕組みを知る必要
              通信をプログラマが制御する必要


          美味しい話ばかりではない

12年3月24日土曜日
「ソケットが言っちゃう…」(1)

          TCPソケットがつながるまでの話
          登場人物
              IPアドレス    (「192.168.20.5」とか)
               通信機器を特定するモノ
              ポート番号  (「8080」とか)
               どのソフトウェアと通信するかを
               指定するモノ
          「IPアドレスとポート番号」で、
          「どの機器の  どのソフトと通信したい」かを
          指定する

12年3月24日土曜日
「ソケットが言っちゃう…」(2)
        サーバ                    クライアント  
 (192.168.2.10:54321)        (192.168.2.21)
     待ち受け(listen)             ポート23008から
                            192.168.2.10:54321
                               へ接続(socket)
       192.168.2.21:23008
        を受け⼊入れ(accept)


      192.168.2.10:54321  ⇔  192.168.2.21:23008
                      接続確⽴立立
12年3月24日土曜日
「ソケットといっしょ…」
          TCPソケットは一端つながれば、後は、
          切れてしまうまで、つながりっぱなし
              「2本の土管」のように入出力を行える
              片方から送ると、もう片方では受信できる
              ストリームというモノを意識するのが吉
               なんかホースとか雨樋にちょろちょろ
               水が流れてくるイメージ?
               必ずしも一度にデータが来てくれる訳で
               はないのがちょっとやっかい
12年3月24日土曜日
なまソケットがつながってから(1)



          送る側は基本的にあまり考えることない
              「このデータ送っておいて」とOSに
              お願いしておけば、大抵はよろしく
              やってくれる
              Java  (Android)の場合は、いちおう送る
              時にもストリーム使った方がいいけど…



12年3月24日土曜日
なまソケットがつながってから(2)

          Androidでデータを受ける場合

      アプリの          アプリの
    メインスレッド                      OOSS
                   通信スレッド


                              データ来たよ

              データ揃ったよ


                               データ来たよ



12年3月24日土曜日
なまソケットがつながってから(3)

          iOSやTitaniumでデータを受ける場合

                    アプリの
  Androidとは                    OOSS
                  メインスレッド
  使うAPIが違う…

  ってだけじゃなく                  データ来たよ
  て、構造も変えな
  くちゃいけない。

  クロスプラット
                 データ
  フォーム対応                     データ来たよ
  ちょっと大変。        揃った!


12年3月24日土曜日
プラットホーム別の実装




12年3月24日土曜日
Androidの場合
          基本的にはJavaの知識が使える


          Thread
          Socket
          ServerSocket  (サーバ側)


          スレッドはちょっとだけ面倒
          ServerSocketもちょっとだけ面倒
12年3月24日土曜日
iPhone/iPadの場合
          スレッド使わなくて大丈夫
              スレッド使ってもいいけど
              下手に使うとパフォーマンス落ちるよ


          クライアント側はCFStreamCreatePairWithSocketToHostって
          便利な関数を使えば、入出力ストリームまで用意して
          くれる
          サーバ側はC言語のlisten,  acceptとか使ってから
          CFStreamCreatePairWithSocketって関数でストリーム化す
          る
              Objective-Cだけで完結しないのでちょっと…
12年3月24日土曜日
Titanium  Mobileの場合
          スレッド使わなくて大丈夫!
          クライアント側もサーバ側も
          Titanium.Network.Socket.TCPだけでOK!

                       かんたん!

                ホントに簡単なんだってば!



          Titanium  1.7で導入
12年3月24日土曜日
var	
  listen	
  =	
  Ti.Network.Socket.createTCP({
      	
  	
  port	
  :	
  consts.ServerPort,
      	
  	
  listenQueueSize:	
  20,
      	
  	
  accepted	
  :	
  function(e)	
  {
      	
  	
  	
  	
  	
  //	
  なんか処理
      	
  	
  },
      	
  	
  error	
  :	
  function(e)	
  {
      	
  	
  	
  	
  //	
  なんかエラー処理
      	
  	
  }
      });
      listen.listen();
      listen.accept({});

12年3月24日土曜日
「困ります、Ti。」
          まだTi.Network.Socket.TCPにバグが
          残ってました


              Android側では受信タイムアウトが設定される
              というバグ
               ドキュメントの記述ともiOS側の挙動ともちがう
              iOS側ではタイムアウトの単位がミリ秒じゃなくて
              秒だった
               ドキュメントの記述ともAndroid側の挙動ともちがう


          バグ報告して、Git経由で修正コードを提供。
          2.0に入れてもらえそう?

12年3月24日土曜日
サンプルアプリの紹介




12年3月24日土曜日
PhotoExchange(仮)

          慌てて水曜日から作りはじめた
          無線LAN経由で写真をどんどん
          他のスマートフォンに送りつける
              勝手に送りつける
          サーバを介さないよ!
          インターネットに
          つながってなくてもいいよ!


12年3月24日土曜日
簡単な構造
               定数(スマートフォンのIPアドレス、  
               待ち受けポート番号、バッファの大き
               さ、表示する画像の数)

               関数(画像の表示、
               指定したIPアドレスへ接続、
               指定したIPアドレスへ写真送付、
               接続中の全てへ写真送付、
               データの読み込み、
               他のスマートフォンの探索と接続)  

               変数(探索中番号(IPアドレスの末尾)、
               接続中のソケット達、
               カメラで取った画像のファイル、
               表示用ImageViewの配列、
               次に表示するImageViewの番号)

12年3月24日土曜日
接続
          アプリは起動するとポート54321で
          待ち受けする
          と同時に、他のIPアドレスの54321を
          叩きまくる
          撮るたびに写真データをつながってる
          全てのスマートフォンに送りつける




                         効率率率?  なにそれ。
12年3月24日土曜日
送信
          こんな流れです
              写真撮る
              画像を縮小
              つながってるソケットに送信
     	
  socket.write(header);
   	
  

   	
  	
  Ti.Stream.writeStream(stream,	
  socket,	
  len);
   	
  	
  socket.write(footer);

              画像の長さ    画像データ              パディング
                                                               効率率率?  (ry
              4バイト      可変長
                               64KB
12年3月24日土曜日
受信
          一度に全部来てくれる訳じゃないので
          ちょっとだけ面倒
          こんな流れ
              とりあえず64KBになるまで受信
              ヘッダ見て画像の長さを判断
              画像データを取り出して
              Ti.UI.ImageViewに設定
     	
  	
  	
  var	
  imgbuf	
  =	
  socket.inputCache.clone(4,	
  len);
   	
  

   	
  	
  	
  var	
  image	
  =	
  imgbuf.toBlob();
   	
  	
  	
  funcs.setImageView(image);

12年3月24日土曜日
デモ




12年3月24日土曜日
まとめと補足
          生でソケットって良いよ
          面倒なソケット(特にサーバソケット)も
          Titanium  Mobileなら簡単!
              しかも勝手にクロスプラットホーム!
              でも細かい制御しようと思ったら
              ネイティヴアプリが必要なのかも


          細かい制御のためのメソッド、プロパティの拡充に
          期待したい
          UDPも使いたいなっ。お願い❤

12年3月24日土曜日

More Related Content

Similar to 「Tiのソケットで待ってる」Titanium Nagoya Chatroom Vol.2

Orb dlt technical_overview(特許情報なし)
Orb dlt technical_overview(特許情報なし)Orb dlt technical_overview(特許情報なし)
Orb dlt technical_overview(特許情報なし)Wataru Fukatsu
 
システムと情報の数理・ネットワーク概論
システムと情報の数理・ネットワーク概論システムと情報の数理・ネットワーク概論
システムと情報の数理・ネットワーク概論shigaoki
 
はじめてのWeb of Things
はじめてのWeb of ThingsはじめてのWeb of Things
はじめてのWeb of ThingsSaki Homma
 
これからはじめるIoTデバイス mbed入門編
これからはじめるIoTデバイス mbed入門編これからはじめるIoTデバイス mbed入門編
これからはじめるIoTデバイス mbed入門編Naoto Tanaka
 
Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する
Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発するTrax Workshop: Windows版TraxソフトウェアをWineで動かして開発する
Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発するYasunori Osana
 
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎Insight Technology, Inc.
 
04 citynet awsセミナー_クラウドでビックデータのスモールスタート
04 citynet awsセミナー_クラウドでビックデータのスモールスタート04 citynet awsセミナー_クラウドでビックデータのスモールスタート
04 citynet awsセミナー_クラウドでビックデータのスモールスタート充博 大崎
 
クラウドでビックデータのスモールスタート
クラウドでビックデータのスモールスタートクラウドでビックデータのスモールスタート
クラウドでビックデータのスモールスタートYukihito Kataoka
 
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoPrestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoTreasure Data, Inc.
 
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?Kuniyasu Suzaki
 
EXE #3:ブロックチェーンのデータ構造とアクセス制御
EXE #3:ブロックチェーンのデータ構造とアクセス制御EXE #3:ブロックチェーンのデータ構造とアクセス制御
EXE #3:ブロックチェーンのデータ構造とアクセス制御blockchainexe
 
これからはじめるインフラエンジニア
これからはじめるインフラエンジニアこれからはじめるインフラエンジニア
これからはじめるインフラエンジニア外道 父
 
20161227 Classmethod Basic Knowledge for Direct Connect
20161227 Classmethod Basic Knowledge for Direct Connect20161227 Classmethod Basic Knowledge for Direct Connect
20161227 Classmethod Basic Knowledge for Direct ConnectKazuki Ueki
 
BrainWars Night 発表資料
BrainWars Night 発表資料BrainWars Night 発表資料
BrainWars Night 発表資料Takuma Kudo
 
テレコムのビッグデータ解析 & AI サイバーセキュリティ
テレコムのビッグデータ解析 & AI サイバーセキュリティテレコムのビッグデータ解析 & AI サイバーセキュリティ
テレコムのビッグデータ解析 & AI サイバーセキュリティNVIDIA Japan
 
KOBE IT FESTIVAL 2012
KOBE IT FESTIVAL 2012KOBE IT FESTIVAL 2012
KOBE IT FESTIVAL 2012Hiroshi Bunya
 
IoTを支える(かもしれない)技術
IoTを支える(かもしれない)技術IoTを支える(かもしれない)技術
IoTを支える(かもしれない)技術Masayuki Uchida
 

Similar to 「Tiのソケットで待ってる」Titanium Nagoya Chatroom Vol.2 (20)

Orb dlt technical_overview(特許情報なし)
Orb dlt technical_overview(特許情報なし)Orb dlt technical_overview(特許情報なし)
Orb dlt technical_overview(特許情報なし)
 
Unity WebSocket
Unity WebSocketUnity WebSocket
Unity WebSocket
 
システムと情報の数理・ネットワーク概論
システムと情報の数理・ネットワーク概論システムと情報の数理・ネットワーク概論
システムと情報の数理・ネットワーク概論
 
はじめてのWeb of Things
はじめてのWeb of ThingsはじめてのWeb of Things
はじめてのWeb of Things
 
これからはじめるIoTデバイス mbed入門編
これからはじめるIoTデバイス mbed入門編これからはじめるIoTデバイス mbed入門編
これからはじめるIoTデバイス mbed入門編
 
Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する
Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発するTrax Workshop: Windows版TraxソフトウェアをWineで動かして開発する
Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する
 
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
 
04 citynet awsセミナー_クラウドでビックデータのスモールスタート
04 citynet awsセミナー_クラウドでビックデータのスモールスタート04 citynet awsセミナー_クラウドでビックデータのスモールスタート
04 citynet awsセミナー_クラウドでビックデータのスモールスタート
 
クラウドでビックデータのスモールスタート
クラウドでビックデータのスモールスタートクラウドでビックデータのスモールスタート
クラウドでビックデータのスモールスタート
 
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoPrestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
 
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
 
EXE #3:ブロックチェーンのデータ構造とアクセス制御
EXE #3:ブロックチェーンのデータ構造とアクセス制御EXE #3:ブロックチェーンのデータ構造とアクセス制御
EXE #3:ブロックチェーンのデータ構造とアクセス制御
 
Protocol2018
Protocol2018Protocol2018
Protocol2018
 
これからはじめるインフラエンジニア
これからはじめるインフラエンジニアこれからはじめるインフラエンジニア
これからはじめるインフラエンジニア
 
計算機理論入門08
計算機理論入門08計算機理論入門08
計算機理論入門08
 
20161227 Classmethod Basic Knowledge for Direct Connect
20161227 Classmethod Basic Knowledge for Direct Connect20161227 Classmethod Basic Knowledge for Direct Connect
20161227 Classmethod Basic Knowledge for Direct Connect
 
BrainWars Night 発表資料
BrainWars Night 発表資料BrainWars Night 発表資料
BrainWars Night 発表資料
 
テレコムのビッグデータ解析 & AI サイバーセキュリティ
テレコムのビッグデータ解析 & AI サイバーセキュリティテレコムのビッグデータ解析 & AI サイバーセキュリティ
テレコムのビッグデータ解析 & AI サイバーセキュリティ
 
KOBE IT FESTIVAL 2012
KOBE IT FESTIVAL 2012KOBE IT FESTIVAL 2012
KOBE IT FESTIVAL 2012
 
IoTを支える(かもしれない)技術
IoTを支える(かもしれない)技術IoTを支える(かもしれない)技術
IoTを支える(かもしれない)技術
 

Recently uploaded

知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
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 カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
論文紹介: 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
 
論文紹介: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
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介: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
 

Recently uploaded (10)

知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: 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
 
論文紹介: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...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: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
 

「Tiのソケットで待ってる」Titanium Nagoya Chatroom Vol.2

  • 1. ソケット さきら  (@sakira) Titanium  Nagoya  Chatroom  #02,  2012.03.24 12年3月24日土曜日
  • 2. 自己紹介 さきら  (@sakira) 最近はiPhone,  iPadとかAndroid向けのアプリ 書いたり、 本を書いたりしてます。 12年3月24日土曜日
  • 3. 自己紹介 さきら  (@sakira) 今は名古屋の会社でエンジニアやってます。 もともとは近距離離無線通信とか組み込みの会社 やっぱりiPadとかAndroidとかiPhoneとかの アプリ書いたり、解析したりとか。 で、「何かと通信させるお仕事」が多かったり JavaScript勉強中。テヘヘッ(*゚ー゚)> 12年3月24日土曜日
  • 4. おしながき TCPソケットって何?  便利なの? TCPソケットってどうやって動くの? TCPソケットってどうやって使うの? TCPソケット使って何したの? 12年3月24日土曜日
  • 6. スマートフォンでの通信って スマートフォンで扱う通信と言えば… インターネット上のサーバ サーバでのプログラミングの話 サーバのリソース管理の話 XML,  JSONの扱い方 Ti.Network.HTTPClient とかとか… 12年3月24日土曜日
  • 7. 「ソケットといっしょ…」 今日はTCP/IPをじかに扱います 「じかに扱う」って? TCP/IP自身は皆さん毎日使ってます インターネット使ってればそりゃもう! 例えばHTTPとの関係は? ※詳しくは次のページへ 12年3月24日土曜日
  • 8. 「TCP」 OSI参照モデル アプリケーション層 HTTP、DHCP、SMTP、FTPとか プレゼンテーション層 SMTP、FTPとか セッション層 TLSとか トランスポート層 TCP、UDPとか ネットワーク層 IP、ARP、ICMPとか データリンク層 イーサネットとか 物理理層 無線、光ケーブル 縁の下の力持ち的な何か。 (wikipediaから引用) 12年3月24日土曜日
  • 9. 「TCPにライバル。」 TCP HTTP 上下関係 基礎 応用 仕組み 単純 ちょっと複雑? 便利に使えるように OS支援 ふつう? なってる 外部ライブラリ あんまり聞かない いっぱいある クロスプラット フォーム OK OK プログラマから 見て 面倒… かんたん! TCP、いいとこないじゃん… orz 12年3月24日土曜日
  • 10. 「なまTCPはすごかった。」(1) TCPは「縁の下の力持ち」だけじゃない! いっぺん繋がってしまえば、 サーバとクライアント関係なし LANにつながるモノなら、 どんなものでもサポートしてる マイコンとかとも簡単に通信できるヨ! スマートフォン同士で通信できるよ 生TCPちゃんは、やればでできるコなんです! はちゃんと使って 12年3月24日土曜日
  • 11. 「なまTCPはすごかった。」(2) なまTCPのソケットはおいしいのです iPhoneとAndroidの直接通信だって カンタン! そう、Titanium Mobileならばね! つないでからはサーバとクライアントは 関係ないけど つながるまではサーバとクライアントは 意識しないといけません。 12年3月24日土曜日
  • 13. 「困ります、生ソケット。」 TCPはネットワークの基礎 スマートフォンで  生のままTCP使うことが 想定されていない 通信の仕組みを知る必要 通信をプログラマが制御する必要 美味しい話ばかりではない 12年3月24日土曜日
  • 14. 「ソケットが言っちゃう…」(1) TCPソケットがつながるまでの話 登場人物 IPアドレス    (「192.168.20.5」とか) 通信機器を特定するモノ ポート番号  (「8080」とか) どのソフトウェアと通信するかを 指定するモノ 「IPアドレスとポート番号」で、 「どの機器の  どのソフトと通信したい」かを 指定する 12年3月24日土曜日
  • 15. 「ソケットが言っちゃう…」(2) サーバ   クライアント   (192.168.2.10:54321) (192.168.2.21) 待ち受け(listen) ポート23008から 192.168.2.10:54321 へ接続(socket) 192.168.2.21:23008 を受け⼊入れ(accept) 192.168.2.10:54321  ⇔  192.168.2.21:23008 接続確⽴立立 12年3月24日土曜日
  • 16. 「ソケットといっしょ…」 TCPソケットは一端つながれば、後は、 切れてしまうまで、つながりっぱなし 「2本の土管」のように入出力を行える 片方から送ると、もう片方では受信できる ストリームというモノを意識するのが吉 なんかホースとか雨樋にちょろちょろ 水が流れてくるイメージ? 必ずしも一度にデータが来てくれる訳で はないのがちょっとやっかい 12年3月24日土曜日
  • 17. なまソケットがつながってから(1) 送る側は基本的にあまり考えることない 「このデータ送っておいて」とOSに お願いしておけば、大抵はよろしく やってくれる Java  (Android)の場合は、いちおう送る 時にもストリーム使った方がいいけど… 12年3月24日土曜日
  • 18. なまソケットがつながってから(2) Androidでデータを受ける場合 アプリの アプリの メインスレッド OOSS 通信スレッド データ来たよ データ揃ったよ データ来たよ 12年3月24日土曜日
  • 19. なまソケットがつながってから(3) iOSやTitaniumでデータを受ける場合 アプリの Androidとは OOSS メインスレッド 使うAPIが違う… ってだけじゃなく データ来たよ て、構造も変えな くちゃいけない。 クロスプラット データ フォーム対応 データ来たよ ちょっと大変。 揃った! 12年3月24日土曜日
  • 21. Androidの場合 基本的にはJavaの知識が使える Thread Socket ServerSocket  (サーバ側) スレッドはちょっとだけ面倒 ServerSocketもちょっとだけ面倒 12年3月24日土曜日
  • 22. iPhone/iPadの場合 スレッド使わなくて大丈夫 スレッド使ってもいいけど 下手に使うとパフォーマンス落ちるよ クライアント側はCFStreamCreatePairWithSocketToHostって 便利な関数を使えば、入出力ストリームまで用意して くれる サーバ側はC言語のlisten,  acceptとか使ってから CFStreamCreatePairWithSocketって関数でストリーム化す る Objective-Cだけで完結しないのでちょっと… 12年3月24日土曜日
  • 23. Titanium  Mobileの場合 スレッド使わなくて大丈夫! クライアント側もサーバ側も Titanium.Network.Socket.TCPだけでOK! かんたん! ホントに簡単なんだってば! Titanium  1.7で導入 12年3月24日土曜日
  • 24. var  listen  =  Ti.Network.Socket.createTCP({    port  :  consts.ServerPort,    listenQueueSize:  20,    accepted  :  function(e)  {          //  なんか処理    },    error  :  function(e)  {        //  なんかエラー処理    } }); listen.listen(); listen.accept({}); 12年3月24日土曜日
  • 25. 「困ります、Ti。」 まだTi.Network.Socket.TCPにバグが 残ってました Android側では受信タイムアウトが設定される というバグ ドキュメントの記述ともiOS側の挙動ともちがう iOS側ではタイムアウトの単位がミリ秒じゃなくて 秒だった ドキュメントの記述ともAndroid側の挙動ともちがう バグ報告して、Git経由で修正コードを提供。 2.0に入れてもらえそう? 12年3月24日土曜日
  • 27. PhotoExchange(仮) 慌てて水曜日から作りはじめた 無線LAN経由で写真をどんどん 他のスマートフォンに送りつける 勝手に送りつける サーバを介さないよ! インターネットに つながってなくてもいいよ! 12年3月24日土曜日
  • 28. 簡単な構造 定数(スマートフォンのIPアドレス、   待ち受けポート番号、バッファの大き さ、表示する画像の数) 関数(画像の表示、 指定したIPアドレスへ接続、 指定したIPアドレスへ写真送付、 接続中の全てへ写真送付、 データの読み込み、 他のスマートフォンの探索と接続)   変数(探索中番号(IPアドレスの末尾)、 接続中のソケット達、 カメラで取った画像のファイル、 表示用ImageViewの配列、 次に表示するImageViewの番号) 12年3月24日土曜日
  • 29. 接続 アプリは起動するとポート54321で 待ち受けする と同時に、他のIPアドレスの54321を 叩きまくる 撮るたびに写真データをつながってる 全てのスマートフォンに送りつける 効率率率?  なにそれ。 12年3月24日土曜日
  • 30. 送信 こんな流れです 写真撮る 画像を縮小 つながってるソケットに送信  socket.write(header);      Ti.Stream.writeStream(stream,  socket,  len);    socket.write(footer); 画像の長さ 画像データ パディング 効率率率?  (ry 4バイト 可変長 64KB 12年3月24日土曜日
  • 31. 受信 一度に全部来てくれる訳じゃないので ちょっとだけ面倒 こんな流れ とりあえず64KBになるまで受信 ヘッダ見て画像の長さを判断 画像データを取り出して Ti.UI.ImageViewに設定      var  imgbuf  =  socket.inputCache.clone(4,  len);        var  image  =  imgbuf.toBlob();      funcs.setImageView(image); 12年3月24日土曜日
  • 33. まとめと補足 生でソケットって良いよ 面倒なソケット(特にサーバソケット)も Titanium  Mobileなら簡単! しかも勝手にクロスプラットホーム! でも細かい制御しようと思ったら ネイティヴアプリが必要なのかも 細かい制御のためのメソッド、プロパティの拡充に 期待したい UDPも使いたいなっ。お願い❤ 12年3月24日土曜日