質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Q&A

1回答

1363閲覧

バックグラウンドで常時接続のソケット通信をしたい

mika33532

総合スコア27

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

0グッド

0クリップ

投稿2018/05/26 14:58

WIFI経由のシリアル通信で、あるデバイスから流れてくるログ(バイナリデータ)を取得するアプリを作成しています。
(社内でのみ使用するもので、AppStoreで公開する予定はありません)
下記のコードを書いてフォアグラウンドではNSStreamでデータを取得できるようになりましたが、
この処理をバックグラウンドで実行し、常時接続で長時間(1〜3時間程度)取得できるようにしたいです。

NSURLSessionに変更し、Background Fetchでできそうかな、と思ったのですが、
ネットで見かけるサンプルではhttp通信に関するサンプルしか見当たらないのですが、
httpではないソケット通信もできるのでしょうか?

なにか参考になりそうなURLや書籍などでも結構ですので、教えていただけませんでしょうか。
よろしくお願いいたします。

<環境>
デバイス: iPad & 独自制作機器(WIFIで接続, 接続後100msecおきに約50byteのデータを送信し続ける)
OS: iOS11
Xcode: Ver9.3

// 設定例: urlStr = @"192.168.0.100", portNo = 1501 -(void) connectToServer:(NSString *)urlStr portNo: (uint) portNo { NSInputStream *_iStream; NSOutputStream *_oStream; [NSStream getStreamsToHostNamed:urlStr port:portNo inputStream:&_iStream outputStream:&_oStream]; iStream = _iStream; oStream = _oStream; [iStream setDelegate:self]; [oStream setDelegate:self]; [iStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; [oStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; [oStream open]; [iStream open]; } // NSStreamDelegate - (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode { switch(eventCode) { case NSStreamEventHasBytesAvailable: : // (省略) データ受信後の処理 break; } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ふつーにできると思いますが、実際にやってみればどうでしょう
社内サーバということで大丈夫だと思いますが、HTTP通信でなければ通さない、という運営している場合があるので注意が必要です

投稿2018/05/27 00:03

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mika33532

2018/05/27 05:35

ご回答ありがとうございます。 テストコードを書いて試してみようと思います。 まずはhttp通信できるようにしてみて、その後試行錯誤してみます。 ちなみに、こちらのページが比較的分かりやすかったので参考にさせていただいてます。 https://www.gaprot.jp/pickup/old-tips/ios7/background-fetch いま分からないことが2点ありまして、 まずはURLの指定方法ですが、上記ページ内ではこのようなコードがあります。 > NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://XXXX"]]; @"http://XXXX"の部分ですが、今回はhttpではないので、例えば@"192.168.0.100:1501"こんな書き方はできるのでしょうか? 2点目ですが、今回のような場合は、タスクはNSURLSessionDownloadTaskを使えばよいのでしょうか?
y_waiwai

2018/05/27 05:51

URL部分は、"http://192.168.0.100:1501" でいけます > 今回のような場合は、タスクはNSURLSessionDownloadTaskを使えばよいのでしょうか iOSは勉強中ですんでちと確かなことは言えませぬ
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問