回答編集履歴

2

うまく動作しない点、回答が不適切だった点について追記

2017/08/04 08:53

投稿

fiveHundred
fiveHundred

スコア9801

test CHANGED
@@ -78,4 +78,136 @@
78
78
 
79
79
 
80
80
 
81
+ 上記のうまく動作しなかった件ですが、元のソースの
82
+
83
+ ```C
84
+
85
+ #define _WINSOCK_DEPRECATED_NO_WARNINGS
86
+
87
+ ```
88
+
89
+ この部分を削除したところ、
90
+
91
+ ```C
92
+
93
+ error C4996: 'gethostbyname': Use getaddrinfo() or GetAddrInfoW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
94
+
95
+ ```
96
+
97
+ と出ていました。
98
+
99
+ なので、```gethostbyname()```は使ってはいけなかったみたいです。
100
+
81
- 上記が不適切理由ついては、今編集ますの、少々お待ちください。
101
+ このよう、errorやwarningを消すようなことは基本的にしいでください。
102
+
103
+ (といっても、投稿前に気づかなかった私も結構ドジですが…)
104
+
105
+ errorはもちろん、warningも意図していない限りは修正すべきです。
106
+
107
+
108
+
109
+ それで、```_WINSOCK_DEPRECATED_NO_WARNINGS```を削除して再度実行していたところ、私の修正でも同じようなerrorが出ていたので、ソースを再度修正しました。
110
+
111
+ 内容は以下の通りです。
112
+
113
+ ```C
114
+
115
+ #include <stdio.h>
116
+
117
+ #include <string.h>
118
+
119
+ #include <WinSock2.h>
120
+
121
+ #include <Ws2tcpip.h>
122
+
123
+
124
+
125
+ #define INTERVAL_TIME 1
126
+
127
+
128
+
129
+ void udpSend(char* address, int port);
130
+
131
+ int port = 20001;//ポート番号
132
+
133
+ char addr[] = "127.0.0.1";//配列を用意
134
+
135
+ double data[] = { 0, 1, 0.0005, -0.0009 };//送信するデータ
136
+
137
+
138
+
139
+
140
+
141
+ int main()
142
+
143
+ {
144
+
145
+ /* Windows 独自の設定 */
146
+
147
+ WSADATA data;
148
+
149
+ WSAStartup(MAKEWORD(2, 0), &data);
150
+
151
+
152
+
153
+ udpSend(addr, port);
154
+
155
+
156
+
157
+ /* バグは無かったですが、ここに書いたほうがいいと思います */
158
+
159
+ WSACleanup();
160
+
161
+
162
+
163
+ return 0;
164
+
165
+ }
166
+
167
+
168
+
169
+ void udpSend(char* address, int port)
170
+
171
+ {
172
+
173
+ int udp = socket(AF_INET, SOCK_DGRAM, 0);
174
+
175
+ struct sockaddr_in addr;
176
+
177
+
178
+
179
+ /*構造体のセット*/
180
+
181
+ memset(&addr, 0, sizeof(addr));
182
+
183
+ addr.sin_family = AF_INET;
184
+
185
+ addr.sin_port = htons(port);
186
+
187
+ /* inet_addr()の代わりにinet_pton()を使う(必要なら返り値を確認して、エラー処理をすること) */
188
+
189
+ inet_pton(AF_INET, address, &addr.sin_addr.S_un.S_addr);
190
+
191
+
192
+
193
+ while (1)
194
+
195
+ {
196
+
197
+ sendto(udp, (char*)data, sizeof data, 0, (struct sockaddr *)&addr, sizeof(addr));
198
+
199
+ Sleep(INTERVAL_TIME);
200
+
201
+ }
202
+
203
+
204
+
205
+ closesocket(udp);
206
+
207
+ }
208
+
209
+ ```
210
+
211
+
212
+
213
+ 以上です。いろいろと失礼しました。

1

不適切だった内容があったので、その箇所を示しました。

2017/08/04 08:53

投稿

fiveHundred
fiveHundred

スコア9801

test CHANGED
@@ -29,6 +29,8 @@
29
29
  ---
30
30
 
31
31
 
32
+
33
+ **以下の内容、不適切でした。読み飛ばしてください**
32
34
 
33
35
  あと、私の環境が悪いのかもしれませんが、
34
36
 
@@ -67,3 +69,13 @@
67
69
  としないと何故かうまく動作しませんでした。
68
70
 
69
71
  (もし、あなたの環境で問題なく動いていれば、これは修正する必要はありません)
72
+
73
+ **ここまで**
74
+
75
+
76
+
77
+ ---
78
+
79
+
80
+
81
+ 上記が不適切な理由については、今編集していますので、少々お待ちください。