Java套接字编程

本文概述

  • 插座类
  • ServerSocket类
  • Java套接字编程示例
  • Java套接字编程示例(双方读写)
Java套接字编程用于在不同JRE上运行的应用程序之间的通信。
Java套接字编程可以是面向连接的或无连接的。
Socket和ServerSocket类用于面向连接的套接字编程, DatagramSocket和DatagramPacket类用于无连接套接字编程。
套接字编程中的客户端必须知道两个信息:
  1. 服务器的IP地址, 以及
  2. 端口号。
在这里, 我们将进行单向客户端和服务器通信。在此应用程序中, 客户端将消息发送到服务器, 服务器读取消息并打印。在这里, 使用了两个类:Socket和ServerSocket。 Socket类用于通信客户端和服务器。通过此类, 我们可以读写消息。 ServerSocket类在服务器端使用。 ServerSocket类的accept()方法将阻止控制台, 直到客户端连接为止。客户端成功连接后, 它将在服务器端返回Socket的实例。
Java套接字编程

文章图片
插座类 【Java套接字编程】套接字只是机器之间通信的端点。 Socket类可用于创建套接字。
重要方法
方法 描述
1)公共InputStream getInputStream() 返回与此套接字连接的InputStream。
2)公共OutputStream getOutputStream() 返回与此套接字连接的OutputStream。
3)公共同步void close() 关闭这个插座
ServerSocket类 ServerSocket类可用于创建服务器套接字。该对象用于与客户端建立通信。
重要方法
方法 描述
1)公共套接字accept() 返回套接字, 并在服务器和客户端之间建立连接。
2)公共同步无效close() 关闭服务器套接字。
Java套接字编程示例 创建服务器:
要创建服务器应用程序, 我们需要创建ServerSocket类的实例。在这里, 我们使用6666端口号进行客户端和服务器之间的通信。你也可以选择其他任何端口号。 accept()方法等待客户端。如果客户端使用给定的端口号进行连接, 则它将返回Socket的实例。
ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept(); //establishes connection and waits for the client

创建客户端:
要创建客户端应用程序, 我们需要创建Socket类的实例。在这里, 我们需要传递服务器的IP地址或主机名以及端口号。在这里, 我们使用“ localhost”, 因为我们的服务器在同一系统上运行。
Socket s=new Socket("localhost", 6666);

让我们看一个简单的Java套接字编程, 其中客户端发送文本, 服务器接收并打印文本。
文件:MyServer.java
import java.io.*; import java.net.*; public class MyServer { public static void main(String[] args){ try{ ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept(); //establishes connection DataInputStream dis=new DataInputStream(s.getInputStream()); String str=(String)dis.readUTF(); System.out.println("message= "+str); ss.close(); }catch(Exception e){System.out.println(e); } } }

文件:MyClient.java
import java.io.*; import java.net.*; public class MyClient { public static void main(String[] args) { try{ Socket s=new Socket("localhost", 6666); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); dout.writeUTF("Hello Server"); dout.flush(); dout.close(); s.close(); }catch(Exception e){System.out.println(e); } } }

要执行此程序, 请打开两个命令提示符, 并在每个命令提示符处执行每个程序, 如下图所示。
运行客户端应用程序后, 服务器控制台上将显示一条消息。
Java套接字编程

文章图片
Java套接字编程示例(双方读写) 在此示例中, 客户端将首先写入服务器, 然后服务器将接收并打印文本。然后服务器将写到客户端, 客户端将接收并打印文本。步骤继续。
文件:MyServer.java
import java.net.*; import java.io.*; class MyServer{ public static void main(String args[])throws Exception{ ServerSocket ss=new ServerSocket(3333); Socket s=ss.accept(); DataInputStream din=new DataInputStream(s.getInputStream()); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String str="", str2=""; while(!str.equals("stop")){ str=din.readUTF(); System.out.println("client says: "+str); str2=br.readLine(); dout.writeUTF(str2); dout.flush(); } din.close(); s.close(); ss.close(); }}

文件:MyClient.java
import java.net.*; import java.io.*; class MyClient{ public static void main(String args[])throws Exception{ Socket s=new Socket("localhost", 3333); DataInputStream din=new DataInputStream(s.getInputStream()); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String str="", str2=""; while(!str.equals("stop")){ str=br.readLine(); dout.writeUTF(str); dout.flush(); str2=din.readUTF(); System.out.println("Server says: "+str2); }dout.close(); s.close(); }}

    推荐阅读