PDA

مشاهده نسخه کامل : نوشتن یک برنامه تحت شبکه



life24
10-04-13, 22:18
سلام

میخوام قطعه کدی حالا به زبان C یا C# بنویسم. که تعداد بسیار زیادی بسته رو به سمت یک IP خاص با Rate بسیار ارسال کنم.
واسط گرافیکی خاصی نمیخوام و فقط یک دکمه کافی است.واسه همین تو بحث گرافیکی نیستم اصبلا.
اما کسی این کار رو کرده؟ چطوری؟ مثلا بسته ICMP استفاده شده در PING میتونه به نظرم مثالی خوبی باشه.

ravegoat
11-04-13, 07:35
سلام!

در سی شارپ با کد زیر می تونید درخواست Ping رو برای یه آدرس مشخص بفرستید:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.NetworkInformation;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Ping pingSender = new Ping ();
IPAddress address = IPAddress.Parse("74.125.136.138"); //Your IP Here
PingReply reply = pingSender.Send(address);

if (reply.Status == IPStatus.Success)
{
Console.WriteLine ("Address: {0}", reply.Address.ToString ());
Console.WriteLine ("RoundTrip time: {0}", reply.RoundtripTime);
Console.WriteLine ("Time to live: {0}", reply.Options.Ttl);
Console.WriteLine ("Don't fragment: {0}", reply.Options.DontFragment);
Console.WriteLine ("Buffer size: {0}", reply.Buffer.Length);
}
else
{
Console.WriteLine (reply.Status);
}
Console.ReadLine();
}
}
}



حالا اگه دستور Send و Replyش رو بذارید توی یه Timer می تونید با نرخ مشخصی بسته ها رو ارسال کنید.

موفق باشید
آرمین

life24
11-04-13, 11:20
سلام
ممنون ازت
اما ما میخواهیم یک Ping نباشه.
مثلا یک میلیون Ping رو بفرستیم با Rate بسیار بالا و زمانی هم برای پاسخ تلف نکنه و با سرعت بالا ارسال کنه.
تو شبکه LAN میخوام تست کنم و انشالله نتیجه رو تو همین تاپیک میزارم.

ravegoat
11-04-13, 21:33
خواهش می کنم.

اگر می خواهید چند تا Ping رو به طور همزمان ارسال کنید باید هر دستور ارسال Ping رو در یک Thread مجزا قرار بدید. اگر هم پاسخ Ping براتون مهم نیست می تونید شرط مربوط به reply.Status رو کلا" حذف کنید.

موفق باشید
آرمین

life24
11-04-13, 21:41
خواهش می کنم.

اگر می خواهید چند تا Ping رو به طور همزمان ارسال کنید باید هر دستور ارسال Ping رو در یک Thread مجزا قرار بدید. اگر هم پاسخ Ping براتون مهم نیست می تونید شرط مربوط به reply.Status رو کلا" حذف کنید.

موفق باشید
آرمین

سلام
اون وقت سیستم من که هیچ فکز کنم سرور هم جواب نده.
مثلا 10000 تا ترد ایجاد بشه !!اصلا مشکل اینجاست که load خیلی میاندازه.وقتی برنامه ران میشه کل سی پی یو رو میخوره.
فکر باید بریم سمت اسمبلی درسته؟ اما این توابع اماده دیگه در اختیار نداریم.
راستی ما Rate رو تعین نکردیم. یعنی پشت هم بفرسته نه با Delay

MoBiN.R
14-04-13, 19:19
دوست عزیز زبان های برنامه نویسی سی و یا سی شارپ مکانیزم اجرای دستوراتشون Blocking هست یعنی هر دستور خط به خط اجرا شده و باید تا به نتیجه رسیدن هر خط سی پی یو رو منتظر گذاشت تا خاتمه و برگشت نتیجه.متاسفانه شما نمیتونید از زبان های خانواده سی برای ارسال همزمان چندین دستور پینگ استفاده کنید مگر با استفاده از تردینگ.که این روش سربار زیادی برای سرور به همراه داره.

پیشنهاد من استفاده از Node.js هست که با مکانیم Non-Blocking این مشکل رو براتون حل میکنه.Non-Blocking در واقع سی پی یو منتظر خاتمه هر خط برنامه نمیشه و برای هر دستور یه کال بک در نظر میگیره که هر زمان که کار هر خط تمام شد نتیجه رو به ما اعلام میکنه.

( داخل پرانتر بگم امیدوارم از این سوال برای ایجاد برنامه ای برای ایجاد حمله زیاد کردن سربار روتر یا سرور استفاده نکنید )