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
广告