0

..:: آموزش جامع سوکت نویسی با زبان جاوا ::..

 
siryahya
siryahya
کاربر طلایی1
تاریخ عضویت : اسفند 1389 
تعداد پست ها : 158652
محل سکونت : ▂▃▄▅▆▇█Tabriz█▇▆▅▄▃▂

پاسخ به:..:: آموزش جامع سوکت نویسی با زبان جاوا ::..

کلاس Client
 
 
خوب بعد از کلاس سرور نوبت به پیاده سازی کلاس
کلاینت هستش،این کلاس همانند کلاس سرور عمل می کندبا این
تفاوت که سرویس گیرنده فقط پس از تایپپیغام در جعبه متن و فشردن
کلید Enter پاکت ها رو به سوی سرویس دهنده ارسال میکند.
هنگامی که این عمل رخ میدهد برنامه ما متد actionPerformed را فراخوانی
می کند، که رشته وارد شده توسط کاربر در جعبه متن را به آرایه
بایتی تبدیل می کند.به وسیله سورس زیر
 
کد PHP:
byte[] data=message.getBytes();  
 
کد PHP:
 
DatagramPacket sendPacket=new DatagramPacket(data,data.length,InetAddress.getLocalHost(),5000);  
سورس کد بالا یک DatagramPacket ایجاد کرده و آنرا به آرایه بایتی،
طول رشته وارد شده توسط کاربر،آدرس IP که پاکت به آن ارسال میشود،
و شماره پورت که سرویس دهنده منتظر پاکتها است مقداردهی می کند.
 
 
 
سورس کد زیر هم پاکتها رو ارسال می کند.
کد PHP:
socket.send(sendPacket);  
 
نکتـــــه :
 
این رو هم بدانید که سرویس گیرنده در این برنامه باید از دریافت 
پاکتها از پورت 5000 سرویس دهنده آگاه باشد، در غیر اینصورت سرویس دهنده پاکنها رو
دریافت نخواهد کرد.

 

ترکی زبان قربون صدقه رفتنه داریم که: گوزلرین گیله‌سین قاداسین آلیم که یعنی درد و بلای مردمک چشات به جونم …!.

دوشنبه 21 اردیبهشت 1394  3:08 AM
تشکرات از این پست
siryahya
siryahya
کاربر طلایی1
تاریخ عضویت : اسفند 1389 
تعداد پست ها : 158652
محل سکونت : ▂▃▄▅▆▇█Tabriz█▇▆▅▄▃▂

پاسخ به:..:: آموزش جامع سوکت نویسی با زبان جاوا ::..

سورس کامل کلاس Client
 
 
 
کد PHP:
import java.io.IOException; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.SocketException; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.*; 
import java.net.InetAddress; 
import javax.swing.*; 
 
 
public class Client extends JFrame { 
 
     private JTextArea displayArea; 
        private DatagramSocket socket; 
            private JTextField enterField; 
 
 
            public Client() 
            { 
            super("client"); 
 
                enterField=new JTextField("Type Message Here"); 
                    enterField.addActionListener(new ActionListener() 
                     
                    { 
                        public void actionPerformed(ActionEvent event) 
                        { 
                            try{ 
                                 
                                String message=event.getActionCommand(); 
                                    displayArea.append("\nSending Packet Containing: "+message+"\n"); 
                                    byte[] data=message.getBytes(); 
                                     
                                    DatagramPacket sendPacket=new DatagramPacket(data,data.length,InetAddress.getLocalHost(),5000); 
                                    socket.send(sendPacket); 
                                        displayArea.append("Packet send\n"); 
                                       displayArea.setCaretPosition(displayArea.getText().length()); 
                            } 
                            catch(IOException exe) 
                            { 
                                displayMessage(exe+"\n"); 
                                exe.printStackTrace(); 
                            } 
                             
                             
                        } 
                     
                    } 
                     
                    ); 
                    add(enterField,BorderLayout.NORTH); 
                       displayArea=new JTextArea(); 
            add(new JScrollPane(displayArea),BorderLayout.CENTER); 
            setSize(400,300); 
            setVisible(true); 
             try{ 
 
                socket=new DatagramSocket(5000); 
            } 
                catch(SocketException exe) 
                { 
                exe.printStackTrace(); 
                System.exit(1); 
                } 
            } 
 
                  /////////////////////////////////////////////////////////// 
        public void waitForPacket() 
        { 
            while(true) 
            { 
                try{ 
 
                    byte[] data=new byte[100]; 
                        DatagramPacket recievePacket=new DatagramPacket(data,data.length); 
                        socket.receive(recievePacket); 
  displayMessage("\nPacket Received: "+"\nFrom Host: "+recievePacket.getAddress()+"\nHost Port: "+recievePacket.getPort()+"\nLenght: "+recievePacket.getLength()+"\nContaining:\n\t"+new String(recievePacket.getData(),0,recievePacket.getLength())); 
 
                } 
            catch(IOException e) 
            { 
                displayMessage(e+"\n"); 
            e.printStackTrace(); 
            } 
 
            } 
        } 
 
        /////////////////////////////////////////////////////////////////////// 
        private void displayMessage(final String message) 
        { 
            SwingUtilities.invokeLater( 
 
                    new Runnable() 
            { 
                public void run() 
                { 
                    displayArea.append(message); 
                } 
            } 
                    ); 
 
        } 
}  

 

ترکی زبان قربون صدقه رفتنه داریم که: گوزلرین گیله‌سین قاداسین آلیم که یعنی درد و بلای مردمک چشات به جونم …!.

دوشنبه 21 اردیبهشت 1394  3:08 AM
تشکرات از این پست
siryahya
siryahya
کاربر طلایی1
تاریخ عضویت : اسفند 1389 
تعداد پست ها : 158652
محل سکونت : ▂▃▄▅▆▇█Tabriz█▇▆▅▄▃▂

پاسخ به:..:: آموزش جامع سوکت نویسی با زبان جاوا ::..

با سلامی دوباره به تمامی دوستان
 
 
تو این چند روز دوستان با دادن پیام به بنده در خواست سورس
یک پورت اسکنر رو داشتند هرچند اگر تاپیک رو با دقت خوانده باشید
متوجه می شوید که بنده راهکار پیاده سازی یک پورت اسکنر قوی رو قبلا
توضیح دادم .. 
 
 
الان تصمیم گرفتم که سورسش رو کامل بزارم همراه با کمی تضیح
 
 
 
اینم از سورس کامل پورت اسکنر
 
کد PHP:
 
import java.util.Scanner;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
 
 
public class P_s {
    private int port1,port2;
        public static void main(String[] args)
        {
                    Scanner input=new Scanner(System.in);
 
        String hostname =input.nextLine();
            int port1=0,port2=0;
                 port1=input.nextInt();
                port2=input.nextInt();
 
    Socket s = null;
        boolean UnknownHostException = false;
 
    try
    {
 
      InetAddress ipaddress = InetAddress.getByName(hostname);
 
       for(int p =port1;p<=port2;p++)         
       {
 
                try
                {
                  s = new Socket(hostname, p);
                  System.out.println("**** Open port **** (: " + p);
              s.close();
                }
                catch (IOException e)
                {
                   System.out.println("No server on port " + p);
 
                }
       System.out.println(hostname);
       }
    }
    catch ( UnknownHostException e )
    {
      System.out.println("Could not find host: " + hostname+"\n\n\n\n\n\n\n");
 
         }
    }
 
 
}  

 

ترکی زبان قربون صدقه رفتنه داریم که: گوزلرین گیله‌سین قاداسین آلیم که یعنی درد و بلای مردمک چشات به جونم …!.

دوشنبه 21 اردیبهشت 1394  3:09 AM
تشکرات از این پست
siryahya
siryahya
کاربر طلایی1
تاریخ عضویت : اسفند 1389 
تعداد پست ها : 158652
محل سکونت : ▂▃▄▅▆▇█Tabriz█▇▆▅▄▃▂

پاسخ به:..:: آموزش جامع سوکت نویسی با زبان جاوا ::..

این سورس
کد PHP:
import java.util.Scanner;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;  
 
 
سرفایل کلاسمون می باشد.
ما با استفاده از این سورس می توانیم کلاسهایی رو که لازم داریم در برناممون
پیاده سازی کنیم. اگر در سورس بالا دقت کنید می بینید که من از کلاس
Socket استفاده کرده ام.
 
ما با این کلاس می توانیم ip و شما هر پورت مورد نظر رو بدست بیاوریم(برای تست کردن)
 
 
 
 
کد PHP:
public class P_s {
    private int port1,port2;
        public static void main(String[] args)
        {
                    Scanner input=new Scanner(System.in);
 
        String hostname =input.nextLine();
            int port1=0,port2=0;
                 port1=input.nextInt();
                port2=input.nextInt();  
سورس بالا هم عنوان کلاسم همراه با تعریف متغییرهای لازم در برناممون هستش.
 
 
 
 
 
 
کد PHP:
    Socket s = null;
        boolean UnknownHostException = false;
 
    try
    {
 
      InetAddress ipaddress = InetAddress.getByName(hostname);
 
       for(int p =port1;p<=port2;p++)         
       {
 
                try
                {
                  s = new Socket(hostname, p);
                  System.out.println("**** Open port **** (: " + p);
              s.close();
                }
                catch (IOException e)
                {
                   System.out.println("No server on port " + p);
 
                }
       System.out.println(hostname);
       }
    }
    catch ( UnknownHostException e )
    {
      System.out.println("Could not find host: " + hostname+"\n\n\n\n\n\n\n");
 
         }
    }
 
 
}  
کار سورس بالا هم تست کردن پورتهای باز و بسته می باشد.
زمانی که شما پورتهای باز و بسته را بوسیله کلاس InetAddress تست میکنید
ممکن است استثناءهایی در برنامه اتفاق بیفتد
که این استثناءها سبب می شوند تا ما نتیجه ی مطلوب از برناممون رو دریافت نکنیم.
به همین دلیل من اومدم برناممون رو با استفاده از فرمان try بلوکه کردم
این کار سبب میشود تا از رخ دادن استثناءهای پیش بینی نشده در برنامه جلوگیری کنیم.
 
 
 
 
 
 
با استفاده از کلاس InetAddress ما ip که بصورت رشته دریافت می کنیم 
رو به ip اصل مطابقت میدهیم(در کل از این کلاس برای تبدیل به اصل استفاده می کنیم)
 
کد PHP:
  InetAddress ipaddress = InetAddress.getByName(hostname);  
 
 
از این سورس هم برا تست کردن پورتهای باز و بسته کامپیوتر قربانی
استفاده می کنیم 
کد PHP:
s = new Socket(hostname, p);  
اگر باز بود با نمایش دادن پیغامی مبنی بر open port مارو اگاه میسازد
که پورت باز است در غیر اینصورت یک استثناء به راه می اندازد از نوع کلاس IOException
که مبنی بر باز نبودن برنامه هستش که من سورس این تابع رو به باز نبودن هدایت کردم 
 
 
 
اگر به سورسمون دقت کرده باشید می بینید که یک کلاس هم از نوع
کد PHP:
UnknownHostException  
در برناممون استفاده کردم .
در حقیقت کار این کلاس نمایش پیغامی مبنی بر ناتوان ماندن در پیدا کردن
یا تجزیه کردن ip داده شده به کلاس InetAddress می باشد.

 

ترکی زبان قربون صدقه رفتنه داریم که: گوزلرین گیله‌سین قاداسین آلیم که یعنی درد و بلای مردمک چشات به جونم …!.

دوشنبه 21 اردیبهشت 1394  3:09 AM
تشکرات از این پست
دسترسی سریع به انجمن ها