Java 教程

Java 控制語句

面向物件程式設計

Java 內建類

Java 檔案處理

Java 錯誤和異常

Java 多執行緒

Java 同步

Java 網路

Java 集合

Java 介面

Java 資料結構

Java 集合演算法

高階 Java

Java 雜項

Java API 和框架

Java 類參考

Java 有用資源

Java - Socket getOutputStream() 方法



描述

Java Socket getOutputStream() 返回此套接字的輸出流。如果此套接字具有關聯的通道,則生成的輸出流將其所有操作委託給該通道。如果通道處於非阻塞模式,則輸出流的寫入操作將丟擲 IllegalBlockingModeException 異常。

關閉返回的 OutputStream 將關閉關聯的套接字。

宣告

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

public OutputStream getOutputStream() throws IOException

引數

返回值

用於將位元組寫入此套接字的輸出流。

異常

IOException − 如果在建立輸出流時發生 I/O 錯誤,或者套接字未連線。

示例

以下示例演示瞭如何使用 Java Socket getOutputStream() 方法獲取使用套接字的伺服器的輸出流。第一步,我們建立了一個 GreetingClient 類,在其中我們使用命令列引數讀取伺服器名稱和埠。使用提供的伺服器名稱和埠,建立一個 Socket 例項作為客戶端。使用 client.getInputStream(),我們讀取伺服器傳送的內容。然後將 InputStream 例項轉換為 DataInputStream,然後使用 DataInputStream.readUTF() 方法列印。使用套接字的 getOutputStream() 方法,我們獲取套接字的輸出流,並在客戶端和伺服器程式中使用此流進行寫入。伺服器程式使用輸出流 writeUTF() 方法將訊息傳遞到客戶端套接字。

以下 GreetingClient 程式是一個客戶端應用程式的示例,該應用程式使用 Socket 類偵聽命令列引數指定的埠號上的伺服器輸出 -

package com.tutorialspoint;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

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 程式是一個伺服器應用程式的示例,該應用程式使用 Socket 類偵聽命令列引數指定的埠號上的客戶端 -

package com.tutorialspoint;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketTimeoutException;

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 GreetingServer 6066
Waiting for client on port 6066...
Just connected to /127.0.0.1:49462
Hello from /127.0.0.1:49462
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!
java-socket.htm
廣告