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

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

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

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

iOS

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

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

1回答

2843閲覧

Socket.IOとNode.jsを利用したSocket通信テストでのエラー

RinRin0

総合スコア10

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

iOS

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

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2017/12/15 06:56

Swift初心者です。Socket通信を利用してサーバーとクライアントでデータを送り合うということしたいと思っています。

リンク内容
<SwiftでWebSocket通信のテスト>

上記のサイトを参考にローカルでのSocket通信を試みようとしたのですが、以下の不具合が生じます。
・tableViewに日時が表示されない
・ボタンを押すとThread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional valueエラーが出てアプリが停止する

サーバー側のNode.jsはサイトのをそのまま利用し問題なく動いている状態です。
Socket通信のやりとりにおいて問題があると思い色々調べてみましたが上記の問題は解決しませんでした。
どうかアドバイスをお願いいたします。

Swift

1<ViewController.Swift> 2 3import UIKit 4import SocketIO 5 6class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 7 8 @IBOutlet weak var tableView: UITableView! 9 //let SocketURL = NSURL(string:"http://localhost:8080/") 10 var dataList:NSMutableArray! 11 var socket: SocketIOClient! 12 13 override func viewDidLoad() { 14 super.viewDidLoad() 15 // Do any additional setup after loading the view, typically from a nib. 16 tableView.delegate = self 17 tableView.dataSource = self 18 19 dataList = NSMutableArray() 20 21 22 let manager = SocketManager(socketURL: URL(string: "http://localhost:8080")!, config: [.log(true), .compress]) 23 let socket = manager.defaultSocket 24 //socket = SocketIOClient(manager: SocketURL! as! SocketManagerSpec, nsp:[.Log(true), .ForcePolling(true)]) *この記述はエラーになる 25 socket.on(clientEvent: .connect) { data, ack in 26 print("socket connected!!") 27 } 28 socket.on(clientEvent: .disconnect) { data, ack in 29 print("socket disconnected!!") 30 } 31 32 socket.on("from_server") { data, emitter in 33 if let message = data as? [String] { 34 print(message[0]) 35 self.dataList.insert(message[0], at:0) 36 self.tableView.reloadData() 37 } 38 } 39 socket.connect() 40 } 41 42 override func didReceiveMemoryWarning() { 43 super.didReceiveMemoryWarning() 44 // Dispose of any resources that can be recreated. 45 } 46 ////////////tableView関連/////////////////// 47 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 48 return dataList.count 49 } 50 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 51 return 52 } 53 func numberOfSections(in tableView: UITableView) -> Int { 54 return 1 55 } 56 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 57 return 50 58 } 59 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 60 let cell : UITableViewCell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "Cell") 61 cell.textLabel?.text = dataList[indexPath.row] as? String 62 return cell 63 } 64 65 @IBAction func clickButton(_ sender: Any) { 66 socket.emit("from_client", "button pushed!!") 67 68 } 69 70} 71

現時点での実行結果

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

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

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

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

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

guest

回答1

0

let socket = manager.defaultSocket

socket = manager.defaultSocket

にする

投稿2017/12/15 08:47

MasakiHori

総合スコア3384

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

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

RinRin0

2017/12/15 12:57

回答ありがとうございます。PCが出先なため、テストするのが月曜になってしまいますが修正して実行してみます!
RinRin0

2017/12/18 02:43

修正し実行してみたところ、正常に動きませんでした。アプリは停止しないものの、tableViewの表示、ボタンを押した時の動作やはりがうまくいきません。コンソール画面の結果を載せさせていただきます。よろしければ再度助言をお願いいたします。 2017-12-18 11:33:17.522066+0900 Client[1819:34452] LOG SocketIOClient{/}: Adding handler for event: connect 2017-12-18 11:33:17.522641+0900 Client[1819:34452] LOG SocketIOClient{/}: Adding handler for event: disconnect 2017-12-18 11:33:17.523860+0900 Client[1819:34452] LOG SocketIOClient{/}: Handling event: statusChange with data: [connecting] 2017-12-18 11:33:17.524119+0900 Client[1819:34452] LOG SocketIOClient{/}: Joining namespace / 2017-12-18 11:33:17.524305+0900 Client[1819:34452] LOG SocketManager: Tried connecting socket when engine isn't open. Connecting 2017-12-18 11:33:17.524512+0900 Client[1819:34452] LOG SocketManager: Adding engine 2017-12-18 11:33:17.526579+0900 Client[1819:34452] LOG SocketIOClient{/}: Adding handler for event: from_server 2017-12-18 11:33:17.526682+0900 Client[1819:34637] LOG SocketEngine: Starting engine. Server: http://localhost:8080 2017-12-18 11:33:17.526805+0900 Client[1819:34452] LOG SocketManager: Manager is being released 2017-12-18 11:33:17.526818+0900 Client[1819:34637] LOG SocketEngine: Handshaking 2017-12-18 11:33:17.528862+0900 Client[1819:34637] LOG SocketEnginePolling: Doing polling GET http://localhost:8080/socket.io/?transport=polling&b64=1 2017-12-18 11:33:17.717451+0900 Client[1819:34681] LOG SocketEnginePolling: Got polling response 2017-12-18 11:33:17.729886+0900 Client[1819:34681] LOG SocketEnginePolling: Got poll message: 97:0{"sid":"GQCgRqoLVP41LUYAAAAC","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":60000}2:40 2017-12-18 11:33:17.757334+0900 Client[1819:34681] LOG SocketEngine: Got message: 0{"sid":"GQCgRqoLVP41LUYAAAAC","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":60000} 2017-12-18 11:33:17.837417+0900 Client[1819:34681] LOG SocketEngine: Got message: 40 2017-12-18 11:33:17.838331+0900 Client[1819:34681] LOG SocketEngine: Writing poll: has data: false 2017-12-18 11:33:17.838967+0900 Client[1819:34681] LOG SocketEnginePolling: Sending poll: as type: 2 2017-12-18 11:33:17.870078+0900 Client[1819:34681] LOG SocketEnginePolling: Created POST string: 1:2 2017-12-18 11:33:17.871073+0900 Client[1819:34681] LOG SocketEnginePolling: POSTing 2017-12-18 11:33:17.871277+0900 Client[1819:34681] LOG SocketEngine: Engine is being released 2017-12-18 11:33:25.772000+0900 Client[1819:34452] LOG SocketIOClient{/}: Handling event: error with data: ["Tried emitting from_client when not connected"]
MasakiHori

2017/12/18 05:17

Socket.IOの事はわかりません
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問