■環境
Windows XP SP2
VS2008 SP1
クライアント 及び リモート ともにWindows XP SP2
wakeonlanプログラムを以下の様に書いたのですが
printf("host->h_length=%d\n",host->h_length);の時点で落ちてしまいます。
デバッグすると、gethostbyname関数が成功していなくてhostに値が入っていない
のが原因なのですがなぜ失敗するか分かりません。
リモートはBIOSはwakeonlanをONに設定して、
ネットワークアダプタもMagic Packetに設定しております。
どなたかWindowsにおけるwake on lanの模範的なソースを提示していただけないでしょうか。
#include "stdafx.h"
#include<windows.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include<commctrl.h>
#include<wininet.h>
int main(void)
{
unsigned char mac[7];
int i;
char* p = "Macアドレスを記入";
for (i = 0; i < 6; i++, p+=3) {
if (isxdigit(p[0]) && isxdigit(p[1]) && (!p[2] || p[2] == ':')) {
unsigned lonfiltered= strtoul(p, NULL, 16);
if (a != ULONG_MAX) { mac[i] = (byte)a; continue; }
}
fprintf(stderr, "invalid MAC address.%d %s\n", i, p); return -1;
}
int sockfd;
struct hostent* host;
struct sockaddr_in peeraddr;
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
int optval = 1;
setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,(char*)&optval,sizeof(optval));
host = gethostbyname("*.*.*.*の形でIPアドレスを設定しておく");
printf("host->h_length=%d\n",host->h_length);
memset(&peeraddr, 0, sizeof(peeraddr));
peeraddr.sin_family = AF_INET;
memcpy(&peeraddr.sin_addr, host->h_addr, host->h_length);
peeraddr.sin_port = htons(9); // discard
char buf[6+6*16];
memset(buf, 0xff, 6);
for (i = 0; i < 16; i++) memcpy(buf+6+i*6, mac, 6);
sendto(sockfd, buf, 6+6*16, 0, (struct sockaddr*)&peeraddr, sizeof(peeraddr));
return 0;
}
No.1ベストアンサー
- 回答日時:
gethostbynameのリファレンスには、
> The gethostbyname function cannot resolve IP address strings passed to it.
と書かれています。
http://msdn.microsoft.com/en-us/library/ms738524 …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
干支のプログラム
-
TCP/IP通信型大文字・小文字変...
-
c++ 文字列を入力して、一文字...
-
C言語のfor文です。 繰り返しの...
-
CStringをwchar_tに変換したい
-
Visual Studio strcpyについて
-
charからLPTSTRへの変換方法
-
charでの計算?
-
配列をnビットシフトする
-
int main()の・・・
-
double型の値をchar配列に変換...
-
switch文で文字を比較すること...
-
DPマッチング
-
int型からchar型への変換
-
文字列から空白を取り除きたい...
-
バイナリファイルをコピーする...
-
c言語でユーザ関数を利用して入...
-
C言語のポインターで詰まっている
-
C++ の FileCopy の設定が解り...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
charでの計算?
-
C言語のfor文です。 繰り返しの...
-
charからLPTSTRへの変換方法
-
文字列から空白を取り除きたい...
-
C言語の入力した文字を反転させ...
-
'const char *' 型は 'char *' ...
-
配列をnビットシフトする
-
str系関数を使わずに二つの文字...
-
int main()の・・・
-
atoi( ) の反対をやりたい
-
CStringをwchar_tに変換したい
-
c++ 文字列を入力して、一文字...
-
switch文で文字を比較すること...
-
干支のプログラム
-
3桁区切(コンマ)記号をつけ...
-
絶対パスからのファイル名の切...
-
間接操作のレベルとは
-
間接参照のレベルが異なっています
-
型変換
おすすめ情報