PDA

View Full Version : روشن و خاموش کردن یه کامپیوتر تو شبکه با یه کامپیوتر دیگه؟



hamkelasii
شنبه 14 مرداد 1391, 12:52 عصر
سلام . کسی تو این مورد نمونه کدی داره بهم کمک کنه ؟

Y_Safaiee
شنبه 14 مرداد 1391, 15:09 عصر
با سلام خدمت شما دوست عزیزم

شما میتونین تو برنامه کلاینتت بعضی فرمان ها رو که از سمت نرم افزار سرور و توسط سوکت نویسی میادو تعریف کنی,مثلا برنامه چت بین دو تا سیستم که یکی سروره یکی کلاینته و به اصلی وصل میشه میتونی تو سیستم کلاینت تعریف کنی که وقتی جیزی وارد شد که اول <t> هست این متنه , هر وقت <F.jpg> اومد این عکسه و فرمتشم .jpg هست,هر وقت <c> اومد یعنی یه فرمانه و باید انجام بدتش.
مثلا Exit<C> یعنی فرمانه و فرمانشم اینه که خارج شو
پس با خوندنش توسط کلاینت دستور application.exit اجرا میشه.

راه های دیگه ایم هست اما ساده ترین راه همینه

موفق باشی
بایت بایت

hamkelasii
شنبه 14 مرداد 1391, 16:49 عصر
ممنون از پاسختون ... ولی من چیزی متوجه نشدم .
یعنی کسی تا حالا نتونسته یه سیستم رو روشن کنه ؟

Y_Safaiee
شنبه 14 مرداد 1391, 17:50 عصر
با سلام مجدد

ببنین دوست عزیز شما میتونی دو تا برنامه بنویسی(یکی برای سیستم سرور یکی برای کلاینت ها) حالا از طریق نرم افزاری که برای سیستم سرور نوشتی فرمان خاموش شدن رو به نرم افزار سمت کلاینت بفرستی تا سیستم کلاینت اجرا و کامپیوتر رو خاموش کنه.

من خودم قبلا چنین برنامه ای نوشته بودم برای اینکه سیستم دیگه ای رو روشن کنی جز کلید پاور راه دیگه ای نیست اما شما میتونین تو بایوس کلاینت ها طوری تنظیمات رو درست کنید تا با زنگ خوردن تلفن سیستم روشن شه,برنامه من طوری بود که من زنگ میزدم به زیر سیستم زیر سیستم روشن میشد وو به سرور متصل میشد,بعد هر وقت کاراشو انجام میداد با سیستم سرور یه دستور به سیستم کلاینت میدادم تا خاموش شه.

یه برنامه چت بین دو رایانه رو تو شبکه با امکان ارسال متن برای همدیگه تصور کنید حالا همونو به دستور تبدیل کنید.

اگه بدون نوشتن نرم افزار میخواین قضیش جداست و جای طرح کردنش این تالار نیست.

موفق باشین
بایت بایت

hamkelasii
شنبه 14 مرداد 1391, 18:03 عصر
برای اینکه سیستم دیگه ای رو روشن کنی جز کلید پاور راه دیگه ای نیست
اصلا اینطور نیست
چون چند تا جا دیدم که می شه :http://www.roomit.blogfa.com/post-67.aspx
من از این کد استفاده می کنم ولی باز سیستم روشن نمی شه

private void Form2_Load(object sender, EventArgs e)
{

MagicPacket cls = new MagicPacket("0015E98713E9");

}
class MagicPacket
{
private const int HEADER = 6;
private const int BYTELENGHT = 6;
private const int MAGICPACKETLENGTH = 16;

private System.Net.IPAddress wolIPAddr = System.Net.IPAddress.Broadcast;
private int wolPortAddr = 7;
private IPEndPoint wolEndPoint;
private byte[] wolMacAddr;
private byte[] magicPacketPayload;

public MagicPacket(string macAddress)
{
wolMacAddr = Mac2Byte(macAddress);
magicPacketPayload = CreatePayload(wolMacAddr);
wolEndPoint = new System.Net.IPEndPoint(wolIPAddr, wolPortAddr);
}

public MagicPacket(string macAddress, string strPortAddress)
{
wolMacAddr = Mac2Byte(macAddress);
magicPacketPayload = CreatePayload(wolMacAddr);
wolPortAddr = Convert.ToInt16(strPortAddress, 10);
wolEndPoint = new System.Net.IPEndPoint(wolIPAddr, wolPortAddr);
}

public string macAddress
{
get
{
string strMacAdress = "";
for (int i = 0; i < wolMacAddr.Length; i++)
{
strMacAdress += wolMacAddr[i].ToString("X2");
}
return strMacAdress;
}
}

protected static byte[] Mac2Byte(string strMacAddress)
{
string macAddr;
byte[] macBytes = new byte[BYTELENGHT];
//remove all non 0-9, A-F, a-f characters
macAddr = Regex.Replace(strMacAddress, @"[^0-9A-Fa-f]", "");
//check if it is now a valid mac adress
if (!(macAddr.Length == BYTELENGHT * 2))
throw new ArgumentException("Mac Adress must be " + (BYTELENGHT * 2).ToString() + " digits of 0-9, A-F, a-f characters in length.");
string hex;
for (int i = 0; i < macBytes.Length; i++)
{
hex = new String(new Char[] { macAddr[i * 2], macAddr[i * 2 + 1] });
macBytes[(i)] = byte.Parse(hex, System.Globalization.NumberStyles.HexNumber);
}
return macBytes;
}

protected static byte[] CreatePayload(byte[] macAddress)
{
byte[] payloadData = new byte[HEADER + MAGICPACKETLENGTH * BYTELENGHT];
for (int i = 0; i < HEADER; i++)
{
payloadData[i] = byte.Parse("FF", System.Globalization.NumberStyles.HexNumber);
}
for (int i = 0; i < MAGICPACKETLENGTH; i++)
{
for (int j = 0; j < BYTELENGHT; j++)
{
payloadData[((i * BYTELENGHT) + j) + HEADER] = macAddress[j];
}
}
return payloadData;
}

public int WakeUp()
{
return SendUDP(magicPacketPayload, wolEndPoint);
}

protected static int SendUDP(byte[] Payload, IPEndPoint EndPoint)
{
int byteSend;
//create a new client socket...
Socket socketClient = new Socket(EndPoint.AddressFamily, SocketType.Dgram, ProtocolType.Udp);
try
{
//open connection...
socketClient.Connect(EndPoint);
//send MagicPacket(TM)...
byteSend = socketClient.Send(Payload, 0, Payload.Length, SocketFlags.None);
}
catch (SocketException ex)
{
throw ex;
}
finally
{
socketClient.Close();
}
return byteSend;
}

لطفا یکی کمک کنه ...

barnamenevisforme
شنبه 14 مرداد 1391, 18:37 عصر
سلام
برنامه شما رو test نکردم.ولی از ظاهرش پیداست که از طریق socket به ip مورد نظر یه packet میفرسته.
حالا همون طور که آقا Youuness (http://barnamenevis.org/member.php?78417-Youuness) فرمودن:
باید توی تنظیمات bios(همون تنظیماتی که با زدن delete در start سیستم واردش میشی) مورد مناسب رو توی حالت alert یا به گوش قراربدی.
پس برنامه شما تا این تنظیم انجام نشده محاله بتونه سیستم رو روشن کنه.

Y_Safaiee
شنبه 14 مرداد 1391, 18:41 عصر
دوست عزیز به اینجای متن داخل سایتم دقت کردی؟؟؟؟


این قابلیت تنها در مورد کارت شبکه و motherboard هایی کارایی دارد که قابلیت Wake on LAN در آنها قابل فعال کردن باشد

برای استفاده از امکان WOL هم کارت شبکه و هم مادربرد باید از این قابلیت پشتیبانی کنند

پس در همه سیستم های این قابلیت وجود نداره و در واقع کاری که میکنه اینه که رو اون پورت گوشی میده,اگه فرکانس جدیدی بیاد مثه مثالی که من درباره زنگ خوردن تلفن گفتم سیستمو روشن میکنه.

در حالت معمول و در همه مادربردها این قابلیت وجود نداره عزیزم برنامه ای که شما میخواین بنویسین مختص سیستم خودتون نباید باشه و هیچکس حاضر نیست مادربرد 40تا سیستمشو عوض کنه.حداقل در ایران ما

موفق باشین
بایت بایت

hamkelasii
شنبه 14 مرداد 1391, 22:27 عصر
به جای اینهمه دلسردی دادن ، یکی کمک می کرد ...
برنامه قرار نیست رو 40 تا سیستم کار کنه ...
از device manager رو کارت شبکه کلیک راست کردم ، از تب power managment تیک دومین گزینه رو هم زدم .
مادربرد همه سیستم ها ATX هست
یکی نیست یه تست بکنه جواب بگیره جواب بده کمک کنه ....

barnamenevisforme
شنبه 14 مرداد 1391, 22:39 عصر
سلام
یادتون باشه که به جای MagicPacket cls = new MagicPacket("0015E98713E9");
mac سیستمی که مد نظر شماست باید قرار داده بشه.

hamkelasii
شنبه 14 مرداد 1391, 23:10 عصر
بله می دونم . اتفاقا مک آدرس مقصد هست