質問編集履歴
3
表記の改善
test
CHANGED
File without changes
|
test
CHANGED
@@ -66,9 +66,7 @@
|
|
66
66
|
|
67
67
|
var addr = getaddrinfo(address: address, port: port)
|
68
68
|
|
69
|
-
print(addr.sin_addr ,",", addr.sin_port)
|
70
69
|
|
71
|
-
|
72
70
|
|
73
71
|
withUnsafeMutablePointer(to: &sendtext) { textp in
|
74
72
|
|
@@ -76,17 +74,11 @@
|
|
76
74
|
|
77
75
|
withUnsafePointer(to: &addr){sockaddrInPtr in
|
78
76
|
|
79
|
-
|
80
|
-
|
81
77
|
sockaddrInPtr.withMemoryRebound(to: sockaddr.self, capacity: 1){ sockaddrPtr in
|
82
78
|
|
83
79
|
let check = sendto(fd, cstr, Int(strlen(sendtext)), 0, sockaddrPtr , socklen_t(MemoryLayout<sockaddr>.stride))
|
84
80
|
|
85
|
-
print(check)
|
81
|
+
print(check)
|
86
|
-
|
87
|
-
print(sendtext)
|
88
|
-
|
89
|
-
|
90
82
|
|
91
83
|
}
|
92
84
|
|
2
```ぬけ
test
CHANGED
File without changes
|
test
CHANGED
@@ -21,6 +21,8 @@
|
|
21
21
|
###該当のソースコード
|
22
22
|
|
23
23
|
//sockaddr_inを作る関数
|
24
|
+
|
25
|
+
```
|
24
26
|
|
25
27
|
func getaddrinfo( address: String, port: CUnsignedShort) -> sockaddr_in{
|
26
28
|
|
1
ポインタの処理を書き直し、sockaddr_inの関数化を行いました。また、sendto()の戻り値の確認も行なった結果、正常に送信文字数が入っていました。
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
Swift3 UDP Client
|
1
|
+
Swift3 UDP Client 指定ipにデータの送信ができない
|
test
CHANGED
@@ -20,29 +20,9 @@
|
|
20
20
|
|
21
21
|
###該当のソースコード
|
22
22
|
|
23
|
-
|
23
|
+
//sockaddr_inを作る関数
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
udpSend(textToSend: "Hello World!", address: ipAddr, port: 6666)
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
func
|
25
|
+
func getaddrinfo( address: String, port: CUnsignedShort) -> sockaddr_in{
|
32
|
-
|
33
|
-
func htons(value: CUnsignedShort) -> CUnsignedShort {
|
34
|
-
|
35
|
-
return (value << 8) + (value >> 8);
|
36
|
-
|
37
|
-
}
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
let port: UInt16 = 6666
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
//let ipAdd = "192.168.1.81"
|
46
26
|
|
47
27
|
let ipOcts = address.components(separatedBy: ".")
|
48
28
|
|
@@ -54,19 +34,13 @@
|
|
54
34
|
|
55
35
|
return val | (u32 << shiftBits)
|
56
36
|
|
57
|
-
|
58
|
-
|
59
37
|
}
|
60
38
|
|
39
|
+
return sockaddr_in(
|
61
40
|
|
41
|
+
sin_len: UInt8(MemoryLayout<sockaddr_in>.stride),
|
62
42
|
|
63
|
-
let fd = socket(AF_INET, SOCK_DGRAM, 0)
|
64
|
-
|
65
|
-
var addr = sockaddr_in(
|
66
|
-
|
67
|
-
sin_len: __uint8_t(MemoryLayout<sockaddr_in>.size),
|
68
|
-
|
69
|
-
sin_family:
|
43
|
+
sin_family: UInt8(AF_INET),
|
70
44
|
|
71
45
|
sin_port: port.bigEndian,
|
72
46
|
|
@@ -76,27 +50,47 @@
|
|
76
50
|
|
77
51
|
)
|
78
52
|
|
53
|
+
}
|
79
54
|
|
80
55
|
|
81
|
-
// 以下が問題のsendto付近です。
|
82
56
|
|
83
|
-
|
57
|
+
func udpSend(textToSend: String, address: String, port: CUnsignedShort) {
|
84
58
|
|
85
|
-
var ptr = unsafeBitCast(addr, to: sockaddr.self)
|
86
59
|
|
87
|
-
withUnsafePointer(to: &ptr){addrptr -> Void in
|
88
60
|
|
61
|
+
let fd = socket(AF_INET, SOCK_DGRAM, 0) // DGRAM makes it UDP
|
62
|
+
|
63
|
+
var sendtext = textToSend
|
64
|
+
|
65
|
+
var addr = getaddrinfo(address: address, port: port)
|
66
|
+
|
67
|
+
print(addr.sin_addr ,",", addr.sin_port)
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
withUnsafeMutablePointer(to: &sendtext) { textp in
|
72
|
+
|
73
|
+
let cstr = UnsafeRawPointer(textp)
|
74
|
+
|
75
|
+
withUnsafePointer(to: &addr){sockaddrInPtr in
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
sockaddrInPtr.withMemoryRebound(to: sockaddr.self, capacity: 1){ sockaddrPtr in
|
80
|
+
|
89
|
-
sendto(fd, cstr, Int(strlen(
|
81
|
+
let check = sendto(fd, cstr, Int(strlen(sendtext)), 0, sockaddrPtr , socklen_t(MemoryLayout<sockaddr>.stride))
|
82
|
+
|
83
|
+
print(check)
|
84
|
+
|
85
|
+
print(sendtext)
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
}
|
90
90
|
|
91
91
|
}
|
92
92
|
|
93
93
|
}
|
94
|
-
|
95
|
-
close(fd)
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
}
|
100
94
|
|
101
95
|
```
|
102
96
|
|