Latest web development tutorials
×

Java หลักสูตร

Java หลักสูตร Java แนะนำโดยย่อ Java การกำหนดค่าการพัฒนาสภาพแวดล้อม Java พื้นฐานไวยากรณ์ Java วัตถุและการเรียน Java ชนิดข้อมูลพื้นฐาน Java ประเภทตัวแปร Java การปรับเปลี่ยน Java ผู้ประกอบการ Java โครงสร้างห่วง Java สาขาโครงสร้าง Java Number หมวดหมู่ Java Character หมวดหมู่ Java String หมวดหมู่ Java StringBuffer Java แถว Java วันที่เวลา Java นิพจน์ปกติ Java ทาง Java Stream,File,IO Java Scanner หมวดหมู่ Java การจัดการข้อยกเว้น

Java เชิงวัตถุ

Java สืบทอด Java Override/Overload Java polymorphism Java ระดับนามธรรม Java บรรจุภัณฑ์ Java อินเตอร์เฟซ Java บรรจุภัณฑ์

Java การสอนที่ทันสมัย

Java โครงสร้างข้อมูล Java คอลเลกชันกรอบ Java ยาชื่อสามัญ Java การทำให้เป็นอันดับ Java เขียนโปรแกรมเครือข่าย Java ส่ง Email Java การเขียนโปรแกรมแบบมัลติเธรด Java Appletรากฐาน Java เอกสารความคิดเห็น Java ตัวอย่าง Java 8 คุณสมบัติใหม่ Java MySQL สัมพันธ์

การเขียนโปรแกรม Java เครือข่าย

เขียนโปรแกรมเครือข่ายหมายถึงการเขียนทำงานบนอุปกรณ์หลาย ๆ (คอมพิวเตอร์) โปรแกรมอุปกรณ์เหล่านี้จะเชื่อมต่อผ่านเครือข่าย

แพคเกจ java.net ใน J2SE API มีการเรียนและอินเตอร์เฟซที่ให้รายละเอียดการติดต่อสื่อสารในระดับต่ำ คุณสามารถใช้ชั้นเรียนเหล่านี้และอินเตอร์เฟซที่จะมุ่งเน้นการแก้ปัญหาที่เกิดขึ้นมากกว่ามุ่งเน้นไปที่รายละเอียดการติดต่อสื่อสาร

แพคเกจ java.net ให้การสนับสนุนสำหรับสองโปรโตคอลเครือข่ายร่วมกัน:

  • TCP: TCP เป็นตัวย่อสำหรับการส่ง Control Protocol ซึ่งรับประกันการสื่อสารที่เชื่อถือระหว่างสองการใช้งาน ใช้กันทั่วไปสำหรับโปรโตคอลอินเทอร์เน็ตที่เรียกว่า TCP / IP
  • UDP: UDP เป็นตัวย่อของยูดีพีโปรโตคอล connectionless ให้ส่งข้อมูลที่จะส่งข้อมูลระหว่างแอพลิเคชัน

กวดวิชานี้จะอธิบายต่อไปนี้สองหัวข้อ

  • การเขียนโปรแกรมซ็อกเก็ต: นี่คือแนวคิดเครือข่ายใช้กันอย่างแพร่หลายจะได้รับการอธิบายในรายละเอียดที่ดีในการ
  • การประมวลผล URL: บทนี้พูดคุยกันในพื้นที่อื่นให้คลิกที่นี่เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับ URL จัดการภาษา Java

การเขียนโปรแกรมซ็อกเก็ต

ซ็อกเก็ตใช้ TCP ให้เป็นกลไกการสื่อสารระหว่างคอมพิวเตอร์สองเครื่อง โปรแกรมไคลเอนต์สร้างซ็อกเก็ตและพยายามที่จะเชื่อมต่อกับซ็อกเก็ตเซิร์ฟเวอร์

เมื่อการเชื่อมต่อจะจัดตั้งขึ้นเซิร์ฟเวอร์จะสร้างวัตถุซ็อกเก็ต ไคลเอ็นต์และเซิร์ฟเวอร์ในขณะนี้สามารถเขียนและอ่านวัตถุซ็อกเก็ตในการสื่อสาร

ระดับ java.net.Socket หมายถึงซ็อกเก็ตและให้ระดับ java.net.ServerSocket ฟังสำหรับโปรแกรมเซิร์ฟเวอร์ของลูกค้าและสร้างกลไกในการเชื่อมต่อกับพวกเขา

มันเกิดขึ้นเมื่อการเชื่อมต่อ TCP โดยใช้ขั้นตอนต่อไปนี้เพื่อสร้างซ็อกเก็ตระหว่างคอมพิวเตอร์สองเครื่อง:

  • เซิร์ฟเวอร์ ServerSocket instantiate วัตถุที่แสดงถึงพอร์ตสื่อสารบนเซิร์ฟเวอร์ที่
  • โทรเซิร์ฟเวอร์ระดับ ServerSocket ยอมรับ () วิธีการที่จะรอจนกว่าลูกค้าเชื่อมต่อไปยังเซิร์ฟเวอร์ในพอร์ตที่กำหนด
  • เมื่อเซิร์ฟเวอร์ที่กำลังรอสำหรับลูกค้าที่จะยกตัวอย่างวัตถุซ็อกเก็ตให้ระบุชื่อเซิร์ฟเวอร์และหมายเลขพอร์ตเพื่อขอเชื่อมต่อ
  • สร้างคลาส Socket พยายามเชื่อมต่อลูกค้าไปยังเซิร์ฟเวอร์และหมายเลขพอร์ตที่ระบุ ถ้ามีการสื่อสารที่มีการจัดตั้งขึ้นเพื่อสร้างลูกค้า Socket วัตถุสามารถสื่อสารกับเซิร์ฟเวอร์
  • ในฝั่งเซิร์ฟเวอร์ยอมรับวิธี () ผลตอบแทนอ้างอิงเซิร์ฟเวอร์ซ็อกเก็ตใหม่ที่จะซ็อกเก็ตที่เชื่อมต่อกับซ็อกเก็ตลูกค้า

หลังจากที่การเชื่อมต่อจะจัดตั้งขึ้นโดยใช้การ / O กระแสผมในระหว่างการสื่อสาร แต่ละซ็อกเก็ตที่มีการป้อนข้อมูลและกระแสกระแสออก การป้อนข้อมูลไคลเอ็นต์กระแสออกสตรีมไปยังเซิร์ฟเวอร์, สตรีมใส่ของลูกค้าเพื่อกระแสออกเซิร์ฟเวอร์

TCP เป็นโปรโตคอลการสื่อสารแบบสองทิศทางเพื่อให้สามารถส่งข้อมูลผ่านสองกระแสข้อมูลในเวลาเดียวกัน. ต่อไปนี้เป็นระดับที่สมบูรณ์มีวิธีการที่มีประโยชน์หลายเพื่อให้บรรลุซ็อกเก็ต


วิธีการเรียน ServerSocket

การใช้งานเซิร์ฟเวอร์โดยใช้คลาส java.net.ServerSocket สำหรับพอร์ตและฟังสำหรับการร้องขอของลูกค้า

ระดับ ServerSocket มีสี่ก่อสร้าง:

เลขที่ วิธีการรายละเอียด
1 ServerSocket สาธารณะ (พอร์ต int) พ่น IOException
สร้างผลผูกพันกับพอร์ตที่เฉพาะเจาะจงของซ็อกเก็ตเซิร์ฟเวอร์
2 ServerSocket สาธารณะ (พอร์ต int, int ค้าง ) พ่น IOException
ที่มีงานในมือที่ระบุสร้างซ็อกเก็ตเซิร์ฟเวอร์และผูกไปยังหมายเลขพอร์ตท้องถิ่นระบุ
3 ServerSocket สาธารณะ (พอร์ต int, int ค้าง อยู่ InetAddress) พ่น IOException
โดยใช้พอร์ตที่ระบุฟังค้างและเชื่อมโยงกับที่อยู่ในท้องถิ่นของเซิร์ฟเวอร์ที่ถูกสร้างขึ้น
4 ServerSocket สาธารณะ () พ่น IOException
สร้างซ็อกเก็ตเซิร์ฟเวอร์ไม่ได้ผูกไว้

สร้างซ็อกเก็ตเซิร์ฟเวอร์ไม่ได้ผูกไว้ หากวิธี ServerSocket สร้างไม่ได้โยนข้อยกเว้นก็หมายความว่าใบสมัครของคุณได้รับการผูกพันที่จะประสบความสำเร็จในพอร์ตที่ระบุและฟังสำหรับการร้องขอของลูกค้า

นี่คือบางส่วนร่วมกันในชั้นเรียนวิธีการ ServerSocket:

เลขที่ วิธีการรายละเอียด
1 int สาธารณะ getLocalPort ()
ผลตอบแทนพอร์ตที่ซ็อกเก็ตนี้จะฟัง
2 ซ็อกเก็ตของประชาชนยอมรับ () พ่น IOException
เขาฟังและยอมรับซ็อกเก็ตนี้
3 โมฆะสาธารณะ setSoTimeout (int หมดเวลา)
โดยการระบุค่าการหมดเวลาเพื่อเปิด / ปิด SO_TIMEOUT ในมิลลิวินาที
4 โมฆะสาธารณะผูก (โฮสต์ SocketAddress, int ค้าง)
ผูก ServerSocket ไปยังที่อยู่ที่เฉพาะเจาะจง (ที่อยู่ IP และหมายเลขพอร์ต)

วิธีการเรียนซ็อกเก็ต

นามระดับ java.net.Socket ของไคลเอ็นต์และเซิร์ฟเวอร์ในการสื่อสารกับแต่ละอื่น ๆ ในซ็อกเก็ต ที่จะได้รับวัตถุลูกค้าซ็อกเก็ตโดยอินสแตนซ์และเซิร์ฟเวอร์ที่จะได้รับวัตถุซ็อกเก็ตจะถูกส่งกลับโดยค่ายอมรับ () วิธีการ

ซ็อกเก็ตระดับห้าก่อสร้าง

เลขที่ วิธีการรายละเอียด
1 ซ็อกเก็ตสาธารณะ (โฮสต์ String, int พอร์ต ) พ่น UnknownHostException, IOException
สร้างซ็อกเก็ตสตรีมและเชื่อมต่อไปยังหมายเลขพอร์ตที่ระบุบนโฮสต์ที่ระบุ
2 ซ็อกเก็ตสาธารณะ (โฮสต์ InetAddress พอร์ต int ) พ่น IOException
สร้างซ็อกเก็ตสตรีมและเชื่อมต่อไปยังที่อยู่ IP ที่ระบุจำนวนพอร์ตที่ระบุ
3 ซ็อกเก็ตสาธารณะ (โฮสต์ String, int พอร์ต , InetAddress localAddress, int localport) พ่น IOException
สร้างซ็อกเก็ตและเชื่อมต่อกับพอร์ตระยะไกลที่ระบุในพื้นที่ห่างไกลที่ระบุ
4 ซ็อกเก็ตสาธารณะ (โฮสต์ InetAddress พอร์ต int , InetAddress localAddress, int localport) พ่น IOException
สร้างซ็อกเก็ตและเชื่อมต่อกับพอร์ตระยะไกลที่ระบุในที่อยู่ห่างไกลที่ระบุ
5 ซ็อกเก็ต (มหาชน)
สร้างซ็อกเก็ตไม่เกี่ยวเนื่องกันชนิดเริ่มต้นระบบ SocketImpl

เมื่อผลตอบแทนซ็อกเก็ตคอนสตรัคและไม่เพียงแค่ยกตัวอย่างวัตถุซ็อกเก็ตมันจริงจะพยายามที่จะเชื่อมต่อกับเซิร์ฟเวอร์ที่ระบุและพอร์ต

นี่คือวิธีการที่น่าสนใจบางคนจะให้ความสนใจกับลูกค้าและเซิร์ฟเวอร์ที่มีวัตถุซ็อกเก็ตโดยไม่คำนึงถึงลูกค้าหรือเซิร์ฟเวอร์สามารถเรียกวิธีการเหล่านี้

เลขที่ วิธีการรายละเอียด
1 โมฆะสาธารณะเชื่อมต่อ (โฮสต์ SocketAddress, int หมดเวลา) พ่น IOException
การเชื่อมต่อซ็อกเก็ตนี้ไปยังเซิร์ฟเวอร์และระบุค่าหมดเวลา
2 ประชาชน InetAddress getInetAddress ()
ที่อยู่กลับมาของการเชื่อมต่อซ็อกเก็ต
3 int สาธารณะ getPort ()
ส่งกลับซ็อกเก็ตนี้จะเชื่อมต่อกับพอร์ตระยะไกล
4 int สาธารณะ getLocalPort ()
ส่งกลับซ็อกเก็ตนี้ถูกผูกไว้กับพอร์ตท้องถิ่น
5 ประชาชน SocketAddress getRemoteSocketAddress ()
ที่อยู่กลับมาของปลายทางซ็อกเก็ตนี้จะเชื่อมต่อถ้ามันเป็นผลตอบแทนที่ไม่เกี่ยวเนื่องกันเป็นโมฆะ
6 ประชาชน InputStream getInputStream () พ่น IOException
ผลตอบแทนที่ได้สตรีมใส่สำหรับซ็อกเก็ตนี้
7 ประชาชน OutputStream getOutputStream () พ่น IOException
ผลตอบแทนที่ได้กระแส output สำหรับซ็อกเก็ตนี้
8 โมฆะสาธารณะใกล้ () พ่น IOException
ปิดซ็อกเก็ตนี้

วิธีการเรียน InetAddress

ชั้นนี้แสดงให้เห็นถึง Internet Protocol (IP) ข้างล่างนี้เป็นประโยชน์เมื่อวิธีการเขียนโปรแกรมซ็อกเก็ต:

เลขที่ วิธีการรายละเอียด
1 คง InetAddress getByAddress (byte [] addr )
ในกรณีที่ได้รับที่อยู่ IP ดิบกลับวัตถุ InetAddress
2 คง InetAddress getByAddress (โฮสต์ String ไบต์ [] addr)
ตามที่สร้างชื่อโฮสต์ InetAddress และที่อยู่ IP ที่ให้มา
3 คง InetAddress getByName (โฮสต์ String)
ตรวจสอบที่อยู่ IP ของโฮสต์ในกรณีของชื่อโฮสต์ที่กำหนด
4 สตริง getHostAddress ()
กลับสตริงที่อยู่ IP (นำเสนอต้นฉบับเดิม)
5 สตริง getHostName ()
ได้รับชื่อโฮสต์สำหรับที่อยู่ IP นี้
6 คง InetAddress getLocalHost ()
ผลตอบแทนที่ได้โฮสต์ท้องถิ่น
7 String toString ()
แปลงที่อยู่ IP นี้เป็นสตริง

ตัวอย่างเช่นลูกค้าซ็อกเก็ต

GreetingClient ต่อไปนี้เป็นโปรแกรมไคลเอนต์ที่เชื่อมต่อผ่านซ็อกเก็ตไปยังเซิร์ฟเวอร์และส่งคำขอแล้วรอการตอบสนอง

// 文件名 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();
      }
   }
}

เช่นเซิร์ฟเวอร์ซ็อกเก็ต

โปรแกรม GreetingServer ต่อไปนี้เป็นโปรแกรมด้านเซิร์ฟเวอร์ที่ใช้ซ็อกเก็ตที่จะฟังในพอร์ตที่ระบุ

// 文件名 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();
      }
   }
}

รวบรวมรหัส Java ข้างต้นและดำเนินการคำสั่งต่อไปนี้เพื่อเริ่มบริการใช้หมายเลขพอร์ตที่ 6066:

$ 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!