teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

追加情報の掲載(症状はリンクローカルアドレス時に発生、試したことの追記)

2018/12/19 05:49

投稿

atRhod
atRhod

スコア10

title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,6 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- 初めまして質問させて頂きます。@miyamaLと申します。
3
+ 初めまして質問させて頂きます。
4
4
  現在、iPhoneとMacOS間を、TCP/IPのsocket通信にて文字列送信するプログラムを作成しております。socket通信にて文字列が送信できるところまではいったのですが、最初の1回だけ文字列送信に失敗してしまいます。
5
5
 
6
6
  ### 発生している問題・エラーメッセージ
@@ -13,6 +13,8 @@
13
13
 
14
14
  調べたところ、ARP(Address Resolution Protocol)というものが生成されていないため、最初の1回だけ通信が成り立たず通信のタイムエラーが発生しているようです。
15
15
 
16
+ また、症状が発生するのはプライベートローカルアドレス(192.168.xxx.xxx)ではなく、リンクローカルアドレス(169.254.xxx.xxx)にて発生するようです。
17
+
16
18
  ここまでは理解できたのですが、iPhone側のSwiftコードにどのような改善をすれば最初の1回から通信が上手くいくか分からなくなってしまいましたので、ここでご質問させて頂きました。よろしくお願い致します。
17
19
 
18
20
  参考サイト
@@ -66,6 +68,7 @@
66
68
 
67
69
  print ('Waiting for connections...')
68
70
  clientsock, client_address = serversock.accept() #接続されればデータを格納
71
+ print('connection!')
69
72
 
70
73
  while True:
71
74
  rcvmsg = clientsock.recv(1024) #受信
@@ -75,8 +78,10 @@
75
78
  ### 試したこと
76
79
 
77
80
  ・一度ダミーの文字列を送信し、ARP情報を生成するようにしました。しかしこの方法では、connect関数実行時に必ずタイムエラーが発生する為、1分間を待たねばなりません。また、もしARP情報がすでに作られていたら接続→切断→接続となってしまいます。
81
+ ・ダミーの文字列を送信しなくても、少し間を開けて2回connect()関数を呼ぶことで接続出来るようです。
82
+ ・症状発生時、MacOS側では、Pyhonコード中「clientsock, client_address = serversock.accept()」部分で止まったままでした。
78
83
 
79
- connect関数を呼び出す部分
84
+ connect関数を呼び出す部分の追加処理
80
85
  ```
81
86
  connect() //接続を指示する
82
87