質問編集履歴
3
表記の改善
title
CHANGED
File without changes
|
body
CHANGED
@@ -32,17 +32,13 @@
|
|
32
32
|
let fd = socket(AF_INET, SOCK_DGRAM, 0) // DGRAM makes it UDP
|
33
33
|
var sendtext = textToSend
|
34
34
|
var addr = getaddrinfo(address: address, port: port)
|
35
|
-
|
35
|
+
|
36
|
-
|
37
36
|
withUnsafeMutablePointer(to: &sendtext) { textp in
|
38
37
|
let cstr = UnsafeRawPointer(textp)
|
39
38
|
withUnsafePointer(to: &addr){sockaddrInPtr in
|
40
|
-
|
41
39
|
sockaddrInPtr.withMemoryRebound(to: sockaddr.self, capacity: 1){ sockaddrPtr in
|
42
40
|
let check = sendto(fd, cstr, Int(strlen(sendtext)), 0, sockaddrPtr , socklen_t(MemoryLayout<sockaddr>.stride))
|
43
|
-
print(check)
|
41
|
+
print(check)
|
44
|
-
print(sendtext)
|
45
|
-
|
46
42
|
}
|
47
43
|
}
|
48
44
|
}
|
2
```ぬけ
title
CHANGED
File without changes
|
body
CHANGED
@@ -10,6 +10,7 @@
|
|
10
10
|
|
11
11
|
###該当のソースコード
|
12
12
|
//sockaddr_inを作る関数
|
13
|
+
```
|
13
14
|
func getaddrinfo( address: String, port: CUnsignedShort) -> sockaddr_in{
|
14
15
|
let ipOcts = address.components(separatedBy: ".")
|
15
16
|
let ipInt = ipOcts.enumerated().reduce(UInt32(0)){ (val, elm) in
|
1
ポインタの処理を書き直し、sockaddr_inの関数化を行いました。また、sendto()の戻り値の確認も行なった結果、正常に送信文字数が入っていました。
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
Swift3 UDP Client
|
1
|
+
Swift3 UDP Client 指定ipにデータの送信ができない
|
body
CHANGED
@@ -9,45 +9,42 @@
|
|
9
9
|
PC側でデータの受信ができません
|
10
10
|
|
11
11
|
###該当のソースコード
|
12
|
-
```Swift3
|
13
|
-
|
14
|
-
|
12
|
+
//sockaddr_inを作る関数
|
15
|
-
|
16
|
-
func
|
13
|
+
func getaddrinfo( address: String, port: CUnsignedShort) -> sockaddr_in{
|
17
|
-
func htons(value: CUnsignedShort) -> CUnsignedShort {
|
18
|
-
return (value << 8) + (value >> 8);
|
19
|
-
}
|
20
|
-
|
21
|
-
let port: UInt16 = 6666
|
22
|
-
|
23
|
-
//let ipAdd = "192.168.1.81"
|
24
14
|
let ipOcts = address.components(separatedBy: ".")
|
25
15
|
let ipInt = ipOcts.enumerated().reduce(UInt32(0)){ (val, elm) in
|
26
16
|
let u32 = UInt32(elm.element)!
|
27
17
|
let shiftBits = 24 - UInt32(elm.offset) * 8
|
28
18
|
return val | (u32 << shiftBits)
|
29
|
-
|
30
19
|
}
|
31
|
-
|
32
|
-
let fd = socket(AF_INET, SOCK_DGRAM, 0)
|
33
|
-
|
20
|
+
return sockaddr_in(
|
34
|
-
sin_len:
|
21
|
+
sin_len: UInt8(MemoryLayout<sockaddr_in>.stride),
|
35
|
-
sin_family:
|
22
|
+
sin_family: UInt8(AF_INET),
|
36
23
|
sin_port: port.bigEndian,
|
37
24
|
sin_addr: in_addr(s_addr: ipInt),
|
38
25
|
sin_zero: ( 0, 0, 0, 0, 0, 0, 0, 0 )
|
39
26
|
)
|
27
|
+
}
|
40
28
|
|
41
|
-
// 以下が問題のsendto付近です。
|
42
|
-
|
29
|
+
func udpSend(textToSend: String, address: String, port: CUnsignedShort) {
|
30
|
+
|
31
|
+
let fd = socket(AF_INET, SOCK_DGRAM, 0) // DGRAM makes it UDP
|
32
|
+
var sendtext = textToSend
|
43
|
-
|
33
|
+
var addr = getaddrinfo(address: address, port: port)
|
34
|
+
print(addr.sin_addr ,",", addr.sin_port)
|
35
|
+
|
36
|
+
withUnsafeMutablePointer(to: &sendtext) { textp in
|
37
|
+
let cstr = UnsafeRawPointer(textp)
|
44
|
-
withUnsafePointer(to: &
|
38
|
+
withUnsafePointer(to: &addr){sockaddrInPtr in
|
39
|
+
|
40
|
+
sockaddrInPtr.withMemoryRebound(to: sockaddr.self, capacity: 1){ sockaddrPtr in
|
45
|
-
|
41
|
+
let check = sendto(fd, cstr, Int(strlen(sendtext)), 0, sockaddrPtr , socklen_t(MemoryLayout<sockaddr>.stride))
|
42
|
+
print(check)
|
43
|
+
print(sendtext)
|
44
|
+
|
45
|
+
}
|
46
46
|
}
|
47
47
|
}
|
48
|
-
close(fd)
|
49
|
-
|
50
|
-
}
|
51
48
|
```
|
52
49
|
|
53
50
|
###試したこと
|