前提・実現したいこと
サーバーがjavaのSocketクラスを使っているのですが、今回iOSとの通信が必要となり、色々調べてみた結果Socket.io-client-swiftというライブラリがあるので、それを使ってみようとしたのですが、どうもうまくいきません。
もしサーバー側を変えずにiOSと通信できるのならば、教えていただきたいです。
おそらく非常に初歩的なことだと思いますが、よろしくお願いします。
発生している問題・エラーメッセージ
サーバーのログを見ると
received data : GET /socket.io/?transport=websocket HTTP/1.1
となっていることから、GETでリクエストされているようなので、そもそもサーバー側もSocket.ioを使っていないといけないと思うのですが...
該当のソースコード
java
1import java.net.ServerSocket; 2import java.net.Socket; 3import java.io.*; 4class Server { 5 public static void main(String args[]) { 6 try { 7 int port = Integer.parseInt(args[0]); //サーバ側の待受ポート番号 8 ServerSocket ss = new ServerSocket(port); 9 10 while(true) { 11 Socket s = ss.accept(); //クライアントからの通信開始要求が来るまで待機 12 13 System.out.println("connect success!"); 14 // 以下、クライアントからの要求発生後 15 InputStream is = s.getInputStream(); //クライアントから数値を受信 16 BufferedReader br = new BufferedReader(new InputStreamReader(is)); 17 String str = br.readLine(); 18 System.out.println("received data : " + str); 19 20 OutputStream os = s.getOutputStream(); 21 DataOutputStream dos = new DataOutputStream(os); 22 dos.writeChars(str); 23 24 // ストリームを閉じる 25 dos.close(); 26 } 27 } 28 catch(Exception e) { 29 System.out.println("Exception: " + e); 30 } 31 } 32}
swift
1 @IBAction func connectButton(_ sender: Any) { 2 print("aaabbabba") 3 4 let manager = SocketManager(socketURL: URL(string: "http://localhost:8080")!, config: [.log(true), .forceWebsockets(true)]) 5 let socket = manager.defaultSocket 6 7 socket.on("connect") { data, ack in 8 print("socket connected") 9 10 print("send message") 11 socket.emit("from_client", "Hello") 12 } 13 14 socket.on("from_server") { data, ack in 15 if let msg = data[0] as? String { 16 print("receive: " + msg) 17 } 18 } 19 20 socket.connect() 21 22 CFRunLoopRun() 23 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/06/01 22:09
2018/06/02 00:05
退会済みユーザー
2018/06/02 01:55
2018/06/03 04:33