در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

آموزش جاوا (Java) قسمت 50 : برنامه نویسی سوکت و شبکه قسمت 2

با سلام به همه دوستان و همراهان Itpro. در مطلب قبلی در مورد مفاهیم برنامه نویسی سوکت توضیحاتی را گفتیم و کلاس ServerSocket را نیز معرفی کردیم در این مطلب قصد داریم کلاس Socket را معرفی کنیم و به ادامه بحث در مورد برنامه نویسی سوکت بپردازیم. در مطلب قبلی گفتیم که باید برای شئ ServerSocket یک پورت مشخص کنیم و بعد از آن متد accept را فراخوانی کنیم. وقتی که شئ ServerSocket متد accept را فراخوانی می کند این متد تا وقتی که یک کلاینت به آن متصل نشود هیچ مقداری را برنمی گرداند و منتظر می ماند. مقدار بازگشتی متد accept یک شئ از کلاس Socket است و نحوه عمل آن به این شکل است که بعد از این که یک کلاینت وصل شد شئ ServerSocket یک سوکت جدید روی یک پورت نامشخص می سازد و یک ارجاع به این سوکت را برمی گرداند. در این حالت یک ارتباط TCP ساخته شده است و تبادل داده می تواند شروع شود.

کلاس Socket

کلاس java.net.Socket نمایانگر سوکتی است که هم کلاینت و هم سرور برای برقراری ارتباط از آن استفاده می کند و هردوی سرور و کلاینت از این کلاس استفاده می کنند. کلاینت یک شئ Socket می سازد و سعی می کند با آن به سرور وصل می شود و سرور نیز با یک شئ Socket با استفاده از متد accept به دست می آورد. پس این کلاس یکی از اصلی ترین کلاس های ارتباط است. این کلاس دارای 5 cosntructor می باشد که در کلاینت می توان از آن استفاده کرد. دقت داشته باشید که در سمت کلاینت باید علاوه بر شماره پورت باید آدرس سرور را نیز مشخص کنیم. در ادامه انواع constructor های مربوط به این کلاس را آورده ایم:

public Socket(String host, int port) throws UnknownHostException, IOException
public Socket(InetAddress host, int port) throws IOException
public Socket(String host, int port, InetAddress localAddress, int localPort) throws IOException
public Socket(InetAddress host, int port, InetAddress localAddress, int localPort) throws IOException
public Socket()

در contructor اولی IP سرور و شماره پورتی را که سرور به آن گوش می دهد داده می شود تا بتوان به آن وصل شد. حال اگر در برقراری ارتباط مشکلی پیش بیاید این constructor یک exception صادر می کند ولی اگر بدون هیچ مشکلی این constructor اجرا شود و شئ Socket ساخته شود به این معنی است که ارتباط با موفقیت انجام شده و می توان ارسال و دریافت پیام ها را انجام داد. Constructor دومی هم دقیقا همان کار constructor قبلی را انجام می دهد با این تفاوت که به جای این که آدرس IP را به صورت رشته ای بگیرد در قالب یک شئ InetAddress دریافت می کند. constructor سوم نیز مانند دو constructor قبلی می باشد با این تفاوت که در این constructor آدرس IP محلی و پورت همان کامپیوتر نیز گرفته می شود تا با استفاده از آن بتوان وصل شد. این برای زمانی است که چند کارت شبکه در کامپیوتر موجود باشد و همه دارای IP های متفاوتی باشند. Constructor چهارمی نیز شبیه به قبلی است با این تفاوت که به جای این که شماره IP را به صورت رشته ای بگیرد به صورت یک شئ از کلاس InetAddress دریافت می کند. constructor چهارم هیچ پارامتر ورودی ندارد و باید بعد از این که شئ سوکت ساخته شد با استفاده از متد connect به سوکت مربوط به سرور وصل شد.

وقتی که یک constructor اجرا می شود مانند سایر کلاس ها نیست که یک شئ ساده بسازد. بلکه در زمان ساخت یک شئ سوکت سعی می کند که به سرور مورد نظر وصل شود. در ادامه به برخی از متدهای مهم کلاس سوکت می پردازیم. دقت داشته باشید که هم در سمت سرور هم در سمت کلاینت شئ سوکت ساخته می شود که متدهای زیر می توانند هم در سمت سرور و هم در سمت کلاینت استفاده شوند. این متدها عبارتند از:

متدهای موجود در کلاس Socket

متد connect

public void connect(SocketAddress host, int timeout) throws IOException

این متد برای زمانی است که از constructor بدون پارامتر استفاده کنیم. با استفاده از این پارامتر آدرس IP و پورت مورد نظر را در قالب یک شئ SocketAddress به آن می دهیم. همچنین یک زمان انتظار نیز برای شئ مشخص می کنیم. که تا زمان مشخص شده منتظر ایجاد اتصال باشد.

متد getInetAddress

public InetAddress getInetAddress()

این متد آدرس IP کامپیوتری را که شی به سوکت آن وصل است را برمی گرداند. مقدار برگشتی این متد یک شئ InetAddress می باشد.

متد getPort

public int getPort()

این متد پورت سوکتی که توسط آن به سرور وصل هستیم را برمی گرداند. مقدار بازگشتی این متد یک عدد است که شماره پورت را نشان می دهد.

متد getLocalPort این متد شماره پورت روی کامپیوتر خودمان را نشان میدهد که از چه پورتی وصل شده ایم.

متد getRemoteSocketAddress این متد آدرس سوکت سرور و یا راه دور را در قالب یک شئ SocketAddress نشان می دهد.

متد getInputStream این متد یک inputStream را برمی گرداند که پیام های فرستاده شده از برنامه راه دور را می توان توسط آن خواند. دقت داشته باشید که منظور ما از برنامه راه دور حتما برنامه ای نیست که بر روی یک کامپیوتر دیگر قرار دارد. منظور ما برنامه ای است که به برنامه ای که در حال اجرا است متصل می شود. این برنامه ممکن است که روی همین کامپیوتری باشد که برنامه خودمان را اجرا می کنیم و یا ممکن است که بر روی یک کامپیوتر دیگر در شبکه باشد.

متد getOutpuStream این متد یک OutputStream را برمی گرداند که می توان با استفاده از آن به ماشین راه دور که به آن متصل هستیم پیام هایی را ارسال کرد.

متد close این متد سوکت را می بندد و منابع را آزاد می کند و ارتباط را قطع می کند.

در ادامه مثالی آورده ایم که گفته هایی را که تاکنون را داشتیم را بهتر درک کنیم. در این مثال یک برنامه کلاینت می سازیم و یک برنامه سرور می سازیم. که برنامه کلاینت به برنامه سرور با استفاده از سوکت وصل می شود و پیامی می فرستد سپس منتظر می ماند تا پاسخ دهد. برنامه کلاینت به شکل زیر خواهد بود

// File Name GreetingClient.java

import java.net.*;
import java.io.*;

public class GreetingClient
{
   public static void main(String [] args)
   {
      String serverName = args[0];
      int port = Integer.parseInt(args[1]);
      try
      {
         System.out.println("Connecting to " + serverName +
		 " on port " + port);
         Socket client = new Socket(serverName, port);
         System.out.println("Just connected to " 
		 + client.getRemoteSocketAddress());
         OutputStream outToServer = client.getOutputStream();
         DataOutputStream out = new DataOutputStream(outToServer);
         out.writeUTF("Hello from "
                      + client.getLocalSocketAddress());
         InputStream inFromServer = client.getInputStream();
         DataInputStream in =
                        new DataInputStream(inFromServer);
         System.out.println("Server says " + in.readUTF());
         client.close();
      }catch(IOException e)
      {
         e.printStackTrace();
      }
   }
}

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

// File Name GreetingServer.java

import java.net.*;
import java.io.*;

public class GreetingServer extends Thread
{
   private ServerSocket serverSocket;
   
   public GreetingServer(int port) throws IOException
   {
      serverSocket = new ServerSocket(port);
      serverSocket.setSoTimeout(10000);
   }

   public void run()
   {
      while(true)
      {
         try
         {
            System.out.println("Waiting for client on port " +
            serverSocket.getLocalPort() + "...");
            Socket server = serverSocket.accept();
            System.out.println("Just connected to "
                  + server.getRemoteSocketAddress());
            DataInputStream in =
                  new DataInputStream(server.getInputStream());
            System.out.println(in.readUTF());
            DataOutputStream out =
                 new DataOutputStream(server.getOutputStream());
            out.writeUTF("Thank you for connecting to "
              + server.getLocalSocketAddress() + "\nGoodbye!");
            server.close();
         }catch(SocketTimeoutException s)
         {
            System.out.println("Socket timed out!");
            break;
         }catch(IOException e)
         {
            e.printStackTrace();
            break;
         }
      }
   }
   public static void main(String [] args)
   {
      int port = Integer.parseInt(args[0]);
      try
      {
         Thread t = new GreetingServer(port);
         t.start();
      }catch(IOException e)
      {
         e.printStackTrace();
      }
   }
}

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

java GreetingServer 6066
Waiting for client on port 6066...

و اجرا و خروجی برنامه کلاینت به شکل زیر خواهد بود دقت داشته باشید که خط اول این برنامه ها دستور اجرای آنها است و جزئی از خروجی نیست:

java GreetingClient localhost 6066
Connecting to localhost on port 6066
Just connected to localhost/127.0.0.1:6066
Server says Thank you for connecting to /127.0.0.1:6066
Goodbye!

Itpro باشید

نویسنده: مهدی عادلی فر

منبع: جزیره برنامه نویسی و توسعه نرم افزار وب سایت توسینسو

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی می باشد.

#نوشتن_برنامه_چت_شبکه #ارتباط_با_کلاینت_و_سرور_در_جاوا #برنامه_نویسی_جاوا #آموزش_برنامه_نویسی_جاوا #آموزش_جاوا #برنامه_نویسی_سوکت_در_جاوا #کلاس_socket_در_جاوا #دوره_آموزشی_جاوا #برنامه_نویسی_شبکه_با_جاوا #برنامه_نویسی_سوکت
عنوان
1 آموزش جاوا (Java) قسمت 1 : معرفی ، خصوصیات و شروع به کار رایگان
2 آموزش جاوا (Java) قسمت 2 : شی گرایی قسمت یک رایگان
3 آموزش جاوا (Java) قسمت 3: شی گرایی قسمت دو رایگان
4 آموزش جاوا (Java) قسمت 4 : شی گرایی قسمت سه رایگان
5 آموزش جاوا (Java) قسمت 5 : انواع داده رایگان
6 آموزش جاوا (Java) قسمت 6 : انواع متغیر رایگان
7 آموزش جاوا (Java) قسمت 7 : Modifier ها رایگان
8 آموزش جاوا (Java) قسمت 8 : عملگرها قسمت یک رایگان
9 آموزش جاوا (Java) قسمت 9 : عملگرها قسمت دو رایگان
10 آموزش جاوا (Java) قسمت 10 : حلقه های تکرار رایگان
11 آموزش جاوا (Java) قسمت 11 : عبارات شرطی رایگان
12 آموزش جاوا (Java) قسمت 12 : کلاس Wrapper اعداد رایگان
13 آموزش جاوا (Java) قسمت 12 : کلاس Wrapper اعداد رایگان
14 آموزش جاوا (Java) قسمت 14: کلاس Wrapper کاراکترها رایگان
15 آموزش جاوا (Java) قسمت 15 : کلاس String و کار با رشته قسمت یک رایگان
16 آموزش جاوا (Java) قسمت 16 : کلاس String و کار با رشته قسمت دو رایگان
17 آموزش جاوا (Java) قسمت 17 : کلاس String و کار با رشته قسمت سه رایگان
18 آموزش جاوا (Java) قسمت 18 : کلاس String و کار با رشته قسمت چهار رایگان
19 آموزش جاوا (Java) قسمت 19 : StringBuilder و StringBuffer رایگان
20 آموزش جاوا (Java) قسمت 20 : استفاده از آرایه ها رایگان
21 آموزش جاوا (Java) قسمت 21 : آموزش کار با تاریخ رایگان
22 آموزش جاوا (Java) قسمت 22 : عبارات منظم (Regular Expression) رایگان
23 آموزش جاوا (Java) قسمت 23 : تعریف و استفاده از متدها قسمت یک رایگان
24 آموزش جاوا (Java) قسمت 24 : تعریف و استفاده از متدها قسمت دو رایگان
25 آموزش جاوا (Java) قسمت 25 : کار با استریم ها و فایل ها رایگان
26 آموزش جاوا (Java) قسمت 26 : کار با دایرکتوری ها رایگان
27 آموزش جاوا (Java) قسمت 27 : کلاس ByteArrayInputStream رایگان
28 آموزش جاوا (Java) قسمت 28 : معرفی کلاس File و متدها رایگان
29 آموزش جاوا (Java) قسمت 29 : معرفی و شرح Exception ها قسمت 1 رایگان
30 آموزش جاوا (Java) قسمت 30 : معرفی و شرح Exception ها قسمت 2 رایگان
31 آموزش جاوا (Java) قسمت 31 : معرفی و شرح Exception ها قسمت 3 رایگان
32 آموزش جاوا (Java) قسمت 32 : استفاده از انوع کلاس های داخلی رایگان
33 آموزش جاوا (Java) قسمت 33 : وراثت کلاس ها و انواع آن رایگان
34 آموزش جاوا (Java) قسمت 34 : Override کردن متد ها رایگان
35 آموزش جاوا (Java) قسمت 35 : چند ریختی (Polymorphism) رایگان
36 آموزش جاوا (Java) قسمت 36 : Enum و ویژگی های آن رایگان
37 آموزش جاوا (Java) قسمت 37 : معرفی Abstract رایگان
38 آموزش جاوا (Java) قسمت 38 : استفاده از کپسول بندی (Encapsulation) رایگان
39 آموزش جاوا (Java) قسمت 39 : استفاده از اینترفیس ها رایگان
40 آموزش جاوا (Java) قسمت 40 : پکیج(Package) و نحوه استفاده رایگان
41 آموزش جاوا (Java) قسمت 41 : معرفی داده ساختارها Enumeration رایگان
42 آموزش جاوا (Java) قسمت 42 : داده ساختار BitSet رایگان
43 آموزش جاوا (Java) قسمت 43 : داده ساختار Vector رایگان
44 آموزش جاوا (Java) قسمت 44 : داده ساختار Stack (پشته) رایگان
45 آموزش جاوا (Java) قسمت 45 : داده ساختار Dictionary رایگان
46 آموزش جاوا (Java) قسمت 46 : داده ساختار Hashtable رایگان
47 آموزش جاوا (Java) قسمت 47 : داده ساختار Properites رایگان
48 آموزش جاوا (Java) قسمت 48 : معرفی و آموزش جنریک (Generic) رایگان
49 آموزش جاوا (Java) قسمت 49 : برنامه نویسی سوکت و شبکه قسمت 1 رایگان
50 آموزش جاوا (Java) قسمت 50 : برنامه نویسی سوکت و شبکه قسمت 2 رایگان
51 آموزش جاوا (Java) قسمت 51 : استفاده از Lambda Expression رایگان
52 آموزش جاوا (Java) قسمت 52 : Thread و Multi-Threading رایگان
53 آموزش جاوا (Java) قسمت 53 : Runnable در Thread و Multi-Threading رایگان
54 آموزش جاوا (Java) قسمت 54 : کلاس Thread و متدها رایگان
زمان و قیمت کل 0″ 0
0 نظر

هیچ نظری ارسال نشده است! اولین نظر برای این مطلب را شما ارسال کنید...

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره پاییزه می تونی امروز ارزونتر از فردا خرید کنی ....