質問編集履歴
1
追加情報の掲載(症状はリンクローカルアドレス時に発生、試したことの追記)
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
2
|
|
3
|
-
初めまして質問させて頂きます。
|
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
|
|