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

回答編集履歴

2

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

2017/08/04 08:53

投稿

fiveHundred
fiveHundred

スコア10466

answer CHANGED
@@ -38,4 +38,70 @@
38
38
 
39
39
  ---
40
40
 
41
+ 上記のうまく動作しなかった件ですが、元のソースの
42
+ ```C
43
+ #define _WINSOCK_DEPRECATED_NO_WARNINGS
44
+ ```
45
+ この部分を削除したところ、
46
+ ```C
47
+ error C4996: 'gethostbyname': Use getaddrinfo() or GetAddrInfoW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
48
+ ```
49
+ と出ていました。
50
+ なので、```gethostbyname()```は使ってはいけなかったみたいです。
41
- 上記が不適切理由については今編集ますの、少々お待ちください。
51
+ このような、errorやwarningを消すようなことは基本的にいでください。
52
+ (といっても、投稿前に気づかなかった私も結構ドジですが…)
53
+ errorはもちろん、warningも意図していない限りは修正すべきです。
54
+
55
+ それで、```_WINSOCK_DEPRECATED_NO_WARNINGS```を削除して再度実行していたところ、私の修正でも同じようなerrorが出ていたので、ソースを再度修正しました。
56
+ 内容は以下の通りです。
57
+ ```C
58
+ #include <stdio.h>
59
+ #include <string.h>
60
+ #include <WinSock2.h>
61
+ #include <Ws2tcpip.h>
62
+
63
+ #define INTERVAL_TIME 1
64
+
65
+ void udpSend(char* address, int port);
66
+ int port = 20001;//ポート番号
67
+ char addr[] = "127.0.0.1";//配列を用意
68
+ double data[] = { 0, 1, 0.0005, -0.0009 };//送信するデータ
69
+
70
+
71
+ int main()
72
+ {
73
+ /* Windows 独自の設定 */
74
+ WSADATA data;
75
+ WSAStartup(MAKEWORD(2, 0), &data);
76
+
77
+ udpSend(addr, port);
78
+
79
+ /* バグは無かったですが、ここに書いたほうがいいと思います */
80
+ WSACleanup();
81
+
82
+ return 0;
83
+ }
84
+
85
+ void udpSend(char* address, int port)
86
+ {
87
+ int udp = socket(AF_INET, SOCK_DGRAM, 0);
88
+ struct sockaddr_in addr;
89
+
90
+ /*構造体のセット*/
91
+ memset(&addr, 0, sizeof(addr));
92
+ addr.sin_family = AF_INET;
93
+ addr.sin_port = htons(port);
94
+ /* inet_addr()の代わりにinet_pton()を使う(必要なら返り値を確認して、エラー処理をすること) */
95
+ inet_pton(AF_INET, address, &addr.sin_addr.S_un.S_addr);
96
+
97
+ while (1)
98
+ {
99
+ sendto(udp, (char*)data, sizeof data, 0, (struct sockaddr *)&addr, sizeof(addr));
100
+ Sleep(INTERVAL_TIME);
101
+ }
102
+
103
+ closesocket(udp);
104
+ }
105
+ ```
106
+
107
+ 以上です。いろいろと失礼しました。

1

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

2017/08/04 08:53

投稿

fiveHundred
fiveHundred

スコア10466

answer CHANGED
@@ -14,6 +14,7 @@
14
14
 
15
15
  ---
16
16
 
17
+ **以下の内容、不適切でした。読み飛ばしてください**
17
18
  あと、私の環境が悪いのかもしれませんが、
18
19
  ```C
19
20
  /*構造体のセット*/
@@ -32,4 +33,9 @@
32
33
  addr.sin_addr.S_un.S_addr = inet_addr(address);
33
34
  ```
34
35
  としないと何故かうまく動作しませんでした。
35
- (もし、あなたの環境で問題なく動いていれば、これは修正する必要はありません)
36
+ (もし、あなたの環境で問題なく動いていれば、これは修正する必要はありません)
37
+ **ここまで**
38
+
39
+ ---
40
+
41
+ 上記が不適切な理由については、今編集していますので、少々お待ちください。