Java套接字编程

Java套接字编程用于在不同JRE上运行的应用程序之间进行通信。

Java套接字编程可以是面向连接的或无连接的。

Socket类和ServerSocket类用于面向连接的套接字编程,DatagramSocket类和DatagramPacket类用于无连接的套接字编程。

套接字编程中的客户端必须知道两个信息:

  1. 服务器的IP地址
  2. 端口号

在这里,我们将进行单向的客户端和服务器通信。在这个应用程序中,客户端发送一条消息到服务器,服务器读取该消息并打印出来。这里使用了两个类:Socket类和ServerSocket类。Socket类用于客户端和服务器之间的通信。通过这个类,我们可以读取和写入消息。ServerSocket类用于服务器端。ServerSocket类的accept()方法会阻塞控制台,直到客户端连接。在客户端成功连接后,它返回服务器端的Socket实例。

图

Socket类

套接字简单地是两台机器之间通信的端点。Socket类可用于创建套接字。

重要方法

MethodDescription
1) public InputStream getInputStream()返回附加到此套接字的 InputStream。
2) public OutputStream getOutputStream()返回附加到此套接字的 OutputStream。
3) public synchronized void close()关闭这个套接字

ServerSocket类

ServerSocket类可用于创建服务器套接字。这个对象用于与客户端建立通信。

重要方法

MethodDescription
1) public Socket accept()返回套接字并在服务器和客户端之间建立连接。
2) public synchronized void close()关闭服务器套接字。

Java Socket编程示例

创建服务器:

要创建服务器应用程序,我们需要创建ServerSocket类的实例。在这里,我们使用6666端口号进行客户端和服务器之间的通信。您也可以选择任何其他端口号。accept()方法等待客户端连接。如果客户端连接到给定的端口号,它会返回一个Socket实例。

ServerSocket ss=new ServerSocket(6666);  
Socket s=ss.accept();//建立连接并等待客户端

创建客户端:

要创建客户端应用程序,我们需要创建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();//建立连接
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);}  
}  
}  

要执行此程序,请打开两个命令提示符,并在每个命令提示符中执行每个程序,如下图所示。

运行客户端应用程序后,服务器控制台上将显示一条消息。

图2

Java Socket编程示例(双向读写)

在这个示例中,客户端首先向服务器写入文本,然后服务器接收并打印该文本。然后服务器向客户端写入文本,客户端接收并打印该文本。步骤依此进行。

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

标签: java, Java面试题, Java下载, java教程, java技术, Java学习, Java学习教程, Java语言, Java开发, Java入门教程, Java进阶教程, Java高级教程, Java笔试题, Java编程思想