সি # তে পিং ব্যবহার করা হচ্ছে


91

আমি যখন উইন্ডোজের সাহায্যে একটি রিমোট সিস্টেমকে পিং করি তখন এটি বলে যে কোনও উত্তর নেই, তবে আমি সি # দিয়ে পিং করলে এটি সাফল্য বলে। উইন্ডোজ সঠিক, ডিভাইস সংযুক্ত নেই। আমার কোড উইন্ডোজ যখন নেই তখন কেন সাফল্যের সাথে পিং করতে সক্ষম?

আমার কোডটি এখানে:

Ping p1 = new Ping();
PingReply PR = p1.Send("192.168.2.18");
// check when the ping is not success
while (!PR.Status.ToString().Equals("Success"))
{
    Console.WriteLine(PR.Status.ToString());
    PR = p1.Send("192.168.2.18");
}
// check after the ping is n success
while (PR.Status.ToString().Equals("Success"))
{
    Console.WriteLine(PR.Status.ToString());
    PR = p1.Send("192.168.2.18");
}

4
নিম্নলিখিত উদাহরণে এই পৃষ্ঠার নীচের অংশে অবস্থিত পোস্ট চেক আউট যখন আপনি দুটিই MSDN লিঙ্কে ক্লিক করুন msdn.microsoft.com/en-us/library/... বা stackoverflow.com/questions/1281176/...
MethodMan

9
আপনারা PR.Status কে IPStatus.Success এর সাথে তুলনা করা উচিত। স্ট্রিং তুলনা এই ক্ষেত্রে সঠিক সরঞ্জাম নয়।
স্যাম অক্স

আপনি আপনার পিং সঞ্চালন পর PingReply বৈশিষ্ট্য কিছু মান কি হয়, (যেমন PR.Address, PR.RoundtripTime, PR.reply.Buffer.Length, এবং PR.Options.Ttl)? এছাড়াও আপনি কি নিশ্চিত যে আপনার কোডে সঠিক আইপি ঠিকানা রয়েছে, এবং কোনও পরীক্ষার আইপি ঠিকানা নয়?
জন সেনচিনা

জন সেনচিনা: আমি সেগুলি সেট করি না এবং হ্যাঁ আমি নিশ্চিত যে আমার আইপি সঠিক।
ব্ল্যাক স্টার

আমার ক্ষেত্রে, যদি "ভিজ্যুয়াল স্টুডিও হোস্টিং প্রক্রিয়া সক্ষম করুন" (অবস্থানটি == >> প্রকল্প-> সম্পত্তি-> ডিবাগ) অক্ষম থাকে, তবে পিং পদ্ধতিটি কাজ করতে পারে না। চেষ্টা করুন!
স্টিভ

উত্তর:


222
using System.Net.NetworkInformation;    

public static bool PingHost(string nameOrAddress)
{
    bool pingable = false;
    Ping pinger = null;

    try
    {
        pinger = new Ping();
        PingReply reply = pinger.Send(nameOrAddress);
        pingable = reply.Status == IPStatus.Success;
    }
    catch (PingException)
    {
        // Discard PingExceptions and return false;
    }
    finally
    {
        if (pinger != null)
        {
            pinger.Dispose();
        }
    }

    return pingable;
}

4
@ জ্যামি দেখুন আপনি ";" এর কথা ভুলে গেছেন লাইনের শেষে।
শার্পোস্কি

10
এটি একটি কোডের উত্তর মাত্র । আমি অনুমান করি যে এটি একটি সঠিক তুলনা কার্যকর করে এবং সম্ভাব্য ব্যতিক্রমগুলি কীভাবে পরিচালনা করবেন তা দেখায়। আপনি ইঙ্গিত গেল কেন এই সঠিক কোড প্রশ্নে কোড সঙ্গে তুলনা হয়?
মার্টেন বোদেউয়েস

8
কয়জন লোক এই উত্তরটি অনুলিপি এবং পেস্ট দ্বারা ব্যবহার করেছেন তা জানেন না: / কমপক্ষে একটি করুন using (var pinger = new Ping()) { .. }এবং তাড়াতাড়ি প্রত্যাবর্তনগুলি এত খারাপ?
পিটার স্নাইডার

4
চেষ্টা / ধরা / অবশেষে যথাযথভাবে নিযুক্ত থাকলে ব্যবহারের সাথে পিং উদাহরণটি মোড়ানোর কোনও অর্থ নেই। এটি এক বা অন্য দুটি নয়। স্ট্যাকওভারফ্লো . com/ প্রশ্নগুলি / ২৮৮৯০২/২ দেখুন ।
জেমিসি

4
@ জ্যামিসি সত্য হতে পারে যদিও এর usingপরিবর্তে এটি ব্যবহার করা পরিষ্কার এবং এটি ক্ষেত্রে পছন্দসই।
কেলি এলটন

43

সি # তে পিং ব্যবহার পদ্ধতিটি ব্যবহার করে অর্জন করা হয় Ping.Send(System.Net.IPAddress), যা সরবরাহিত (বৈধ) আইপি ঠিকানা বা ইউআরএল-তে পিংয়ের অনুরোধ চালায় এবং একটি প্রতিক্রিয়া পায় যা ইন্টারনেট কন্ট্রোল মেসেজ প্রোটোকল (আইসিএমপি) প্যাকেট বলে । প্যাকেটে 20 বাইটের শিরোনাম রয়েছে যা সার্ভারের প্রতিক্রিয়া ডেটা রয়েছে যা পিংয়ের অনুরোধ পেয়েছে। । নেট ফ্রেমওয়ার্ক System.Net.NetworkInformationনেমস্পেসে এমন একটি ক্লাস রয়েছে PingReplyযা ICMPপ্রতিক্রিয়াটি অনুবাদ করতে এবং পিনযুক্ত সার্ভার সম্পর্কে দরকারী তথ্য সরবরাহ করার জন্য যেমন বৈশিষ্ট্যযুক্ত রয়েছে:

  • আইপিস্ট্যাটাস : হোস্টের ঠিকানা পায় যা ইন্টারনেট কন্ট্রোল মেসেজ প্রোটোকল (আইসিএমপি) প্রতিধ্বনির উত্তর পাঠায়।
  • আইপিএড্রেস : একটি ইন্টারনেট কন্ট্রোল মেসেজ প্রোটোকল (আইসিএমপি) ইকো অনুরোধ প্রেরণ এবং সংশ্লিষ্ট আইসিএমপি প্রতিধ্বনির উত্তর বার্তা গ্রহণের জন্য নেওয়া মিলিসেকেন্ডের সংখ্যা পেয়েছে
  • রাউন্ডট্রিপটাইম (System.Int64) : একটি ইন্টারনেট নিয়ন্ত্রণ বার্তা প্রোটোকল (আইসিএমপি) প্রতিধ্বনি অনুরোধে উত্তর প্রেরণ করতে ব্যবহৃত বিকল্পগুলি পায়।
  • PingOptions (System.Byte []) : একটি ইন্টারনেট নিয়ন্ত্রণ বার্তা প্রোটোকল (আইসিএমপি) প্রতিধ্বনির উত্তর বার্তায় প্রাপ্ত ডেফার বাফারটি পেয়ে যায়।

WinFormsসি # তে পিং কীভাবে কাজ করে তা দেখানোর জন্য নীচে একটি সাধারণ উদাহরণ রয়েছে । একটি বৈধ আইপি ঠিকানা সরবরাহ করে textBox1এবং ক্লিক করে button1আমরা Pingক্লাসের উদাহরণ , স্থানীয় পরিবর্তনশীল PingReplyএবং আইপি বা ইউআরএল ঠিকানা সঞ্চয় করার জন্য একটি স্ট্রিং তৈরি করছি। আমরা PingReplyপিং Sendপদ্ধতিতে নিয়োগ দিই , তারপরে আমরা জবাবটি স্থিতির স্থিতির সাথে স্থিতির সাথে তুলনা করে অনুরোধটি সফল হয়েছিল কিনা তা পরীক্ষা করি IPAddress.Success। অবশেষে, আমরা PingReplyব্যবহারকারীর জন্য আমাদের যে তথ্য প্রদর্শন করতে হবে তা থেকে নিষ্কাশন করি, যা উপরে বর্ণিত রয়েছে।

    using System;
    using System.Net.NetworkInformation;
    using System.Windows.Forms;

    namespace PingTest1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            private void button1_Click(object sender, EventArgs e)
            {
                Ping p = new Ping();
                PingReply r;
                string s;
                s = textBox1.Text;
                r = p.Send(s);

                if (r.Status == IPStatus.Success)
                {
                    lblResult.Text = "Ping to " + s.ToString() + "[" + r.Address.ToString() + "]" + " Successful"
                       + " Response delay = " + r.RoundtripTime.ToString() + " ms" + "\n";
                }
            }

            private void textBox1_Validated(object sender, EventArgs e)
            {
                if (string.IsNullOrWhiteSpace(textBox1.Text) || textBox1.Text == "")
                {
                    MessageBox.Show("Please use valid IP or web address!!");
                }
            }
        }
    }

10
ব্যবহার রেফারেন্স অন্তর্ভুক্ত জন্য কুদোস!
mattpm

4
আপনি কি কয়েকটি লাইন লিখে আপনার কোডটি ব্যাখ্যা করতে পারবেন না? কোডস এই টুকরাটি বুঝতে চায় এমন লোকদের জন্য এটি কার্যকর নয় ...
হিল

4
নিশ্চিত কথা @ হিল, আমি কয়েক বছর আগে এই উত্তরটি দ্রুত লিখেছিলাম, আমি সম্পাদনার করব এবং উত্তরের যথাযথ বিবরণ যুক্ত করব।
আশরাফ আবুসাদা ২ '

3

আমদানি করে সিস্টেম.নেট. নেট ওয়ার্ক ইনফর্মেশন

পাবলিক ফাংশন পিংহোস্ট (স্ট্রিং হিসাবে বাইওয়াল নামঅর অ্যাড্রেস) বুলিয়ান হিসাবে ডিম পিংজেবল যেমন বুলিয়ান = ফিংস ডিম পিঞ্জার হিসাবে পিং ডিম

    Try
        pinger = New Ping()
        lPingReply = pinger.Send(nameOrAddress)
        MessageBox.Show(lPingReply.Status)
        If lPingReply.Status = IPStatus.Success Then

            pingable = True
        Else
            pingable = False
        End If


    Catch PingException As Exception
        pingable = False
    End Try
    Return pingable
End Function

-8
private void button26_Click(object sender, EventArgs e)
{
    System.Diagnostics.ProcessStartInfo proc = new System.Diagnostics.ProcessStartInfo();
    proc.FileName = @"C:\windows\system32\cmd.exe";
    proc.Arguments = "/c ping -t " + tx1.Text + " ";
    System.Diagnostics.Process.Start(proc);
    tx1.Focus();
}

private void button27_Click(object sender, EventArgs e)
{
    System.Diagnostics.ProcessStartInfo proc = new System.Diagnostics.ProcessStartInfo();
    proc.FileName = @"C:\windows\system32\cmd.exe";
    proc.Arguments = "/c ping  " + tx2.Text + " ";
    System.Diagnostics.Process.Start(proc);
    tx2.Focus();
}

4
আপনি কি কয়েকটি লাইন লিখে আপনার কোডটি ব্যাখ্যা করতে পারবেন না? কোডস এই টুকরাটি বুঝতে চায় এমন লোকদের জন্য এটি কার্যকর নয় ...
হিল

মূলত উপস্থাপিত কোডটি মোটেই ডিআরওয়াই নয়
গ্রেইবার্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.