Java 教程

Java 控制語句

面向物件程式設計

Java 內建類

Java 檔案處理

Java 錯誤與異常

Java 多執行緒

Java 同步

Java 網路

Java 集合

Java 介面

Java 資料結構

Java 集合演算法

高階 Java

Java 雜項

Java API 與框架

Java 類引用

Java 有用資源

Java - Socket connect(SocketAddress endpoint, int timeout) 方法



描述

Java Socket connect() 方法將此套接字連線到伺服器,並指定超時值。超時值為零表示無限超時。然後,連線將阻塞,直到建立連線或發生錯誤。

宣告

以下是 java.net.Socket.connect() 方法的宣告

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

引數

endpoint - SocketAddress。

timeout - 以毫秒為單位使用的超時值。

返回值

異常

IOException - 如果連線過程中發生錯誤。

SocketTimeoutException - 如果在連線之前超時。

IllegalBlockingModeException - 如果此套接字具有關聯的通道,並且該通道處於非阻塞模式。

IllegalArgumentException - 如果 endpoint 為 null 或是不受此套接字支援的 SocketAddress 子類。

示例 1

以下示例演示了 Java Socket connect() 方法的使用,用於將套接字連線到 localhost 的 6066 埠。第一步,我們使用無引數建構函式建立了一個 Socket 例項。然後,為了建立 SocketAddress 物件,我們初始化了 localhost 地址的 InetAddress 例項。使用 InetSocketAddress 物件,我們建立了一個 SocketAddress 物件,然後使用 connect() 方法,我們將地址連線到套接字。完成後,我們列印本地埠和 inetaddress,如所示。最後,我們使用 close() 方法關閉套接字。由於 localhost 伺服器未啟動,因此它會丟擲錯誤。

package com.tutorialspoint;

import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;

public class SocketDemo {
   public static void main(String[] args) throws IOException {
      Socket socket = new Socket();  
      InetAddress inetAddress=InetAddress.getByName("localhost");  
      SocketAddress socketAddress=new InetSocketAddress(inetAddress, 6066);  
      socket.connect(socketAddress,100); 

      System.out.println("Port number: "+socket.getLocalPort()); 
      System.out.println("Inet Address: "+socket.getInetAddress()); 
      socket.close();
   }
}

輸出

讓我們編譯並執行上述程式,這將產生以下結果:

Exception in thread "main" java.net.ConnectException: Connection refused: connect
	at java.base/java.net.PlainSocketImpl.waitForConnect(Native Method)
	at java.base/java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:107)
	at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:412)
	at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:255)
	at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:237)
	at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.base/java.net.Socket.connect(Socket.java:608)
	at com.tutorialspoint.SocketDemo.main(SocketDemo.java:14)

示例 2

以下示例演示了 Java Socket connect() 方法的使用,用於將套接字繫結到 localhost 的 6066 埠。第一步,我們使用無引數建構函式建立了一個 Socket 例項。現在,使用 connect() 方法,我們嘗試將 null 地址連線到套接字。完成後,我們列印分配給套接字的預設本地埠和 inetaddress,如所示。最後,我們使用 close() 方法關閉套接字。由於地址為 null,connect 方法會丟擲錯誤。

package com.tutorialspoint;

import java.io.IOException;
import java.net.Socket;

public class SocketDemo {
   public static void main(String[] args) throws IOException {
      Socket socket = new Socket();  
      socket.connect(null,100); 

      System.out.println("Port number: "+socket.getLocalPort()); 
      System.out.println("Inet Address: "+socket.getInetAddress()); 
      socket.close();
   }
}

輸出

讓我們編譯並執行上述程式,這將產生以下結果:

Exception in thread "main" java.lang.IllegalArgumentException: connect: The address can't be null
	at java.base/java.net.Socket.connect(Socket.java:579)
	at java.base/java.net.Socket.connect(Socket.java:557)
	at com.tutorialspoint.SocketDemo.main(SocketDemo.java:9)

示例 3

以下示例演示了 Java Socket connect() 方法的使用,用於在套接字已關閉的情況下將套接字繫結到 localhost 的 6066 埠。第一步,我們使用無引數建構函式建立了一個 Socket 例項。然後,為了建立 SocketAddress 物件,我們初始化了 localhost 地址的 InetAddress 例項。使用 InetSocketAddress 物件,我們建立了一個 SocketAddress 物件。使用 socket.close(),我們關閉套接字,然後使用 connect() 方法,我們將地址連線到套接字,如下所示:

package com.tutorialspoint;

import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;

public class SocketDemo {
   public static void main(String[] args) throws IOException {
      Socket socket = new Socket();  
      InetAddress inetAddress=InetAddress.getByName("localhost");  
      SocketAddress socketAddress=new InetSocketAddress(inetAddress, 6066);
      socket.close();	  
      socket.connect(socketAddress,100); 

      System.out.println("Port number: "+socket.getLocalPort()); 
      System.out.println("Inet Address: "+socket.getInetAddress()); 
      socket.close();
   }
}

輸出

讓我們編譯並執行上述程式,這將產生以下結果:

Exception in thread "main" java.net.SocketException: Socket is closed
	at java.base/java.net.Socket.connect(Socket.java:585)
	at com.tutorialspoint.SocketDemo.main(SocketDemo.java:15)
java-socket.htm
廣告