专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 Java socket编程详解

Java socket编程详解

更新时间:2022-06-06 10:36:51 来源:动力节点 浏览1056次

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

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

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

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

1.服务器的 IP 地址,以及

2.端口号。

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

套接字类

套接字只是机器之间通信的端点。Socket 类可用于创建套接字。

重要方法

方法 描述
公共输入流 getInputStream() 返回与此套接字连接的 InputStream。
公共输出流 getOutputStream() 返回与此套接字连接的 OutputStream。
公共同步无效关闭() 关闭此套接字

服务器套接字类

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

重要方法

方法 描述
公共套接字接受() 返回套接字并在服务器和客户端之间建立连接。
公共同步无效关闭() 关闭服务器套接字。

Java Socket 编程示例

创建服务器:

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

ServerSocket ss=新的 ServerSocket(6666 );  
套接字 s=ss.accept(); //建立连接并等待客户端   

创建客户端:

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

套接字 s=新 套接字(“本地主机” ,6666 );  

让我们看一个简单的 Java 套接字编程,其中客户端发送文本,服务器接收并打印它。

文件:MyServer.java

导入 java.io.*;  
导入 java.net.*;  
公共类 MyServer {   
公共静态无效 主要(字符串[]参数){    
试试{  
ServerSocket ss=新的 ServerSocket(6666 );  
套接字 s=ss.accept(); //建立连接   
DataInputStream dis= new  DataInputStream(s.getInputStream());  
字符串 str=(String)dis.readUTF();  
System.out.println( "message=" +str);  
ss.close();  
}捕捉(异常 e){System.out.println(e);}  
}  
}  

文件:MyClient.java

导入 java.io.*;  
导入 java.net.*;  
公共类 MyClient {   
公共静态无效 主要(字符串[]参数){    
试试{      
套接字 s=新 套接字(“本地主机” ,6666 );  
DataOutputStream dout= new  DataOutputStream(s.getOutputStream());  
dout.writeUTF( "你好服务器" );  
dout.flush();  
dout.close();  
s.close();  
}捕捉(异常 e){System.out.println(e);}  
}  
}  

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

在此示例中,客户端将首先写入服务器,然后服务器将接收并打印文本。然后服务器将写入客户端,客户端将接收并打印文本。步骤继续。

文件:MyServer.java

导入 java.net.*;  
导入 java.io.*;  
类我的 服务器{  
公共静态void  main(String args[])抛出 异常{    
ServerSocket ss=新的 ServerSocket(3333 );  
套接字 s=ss.accept();  
DataInputStream din= new  DataInputStream(s.getInputStream());  
DataOutputStream dout= new  DataOutputStream(s.getOutputStream());  
BufferedReader br= new  BufferedReader( new  InputStreamReader(System.in));   
字符串 str= "" ,str2= "" ;  
而(!str.equals(“停止” )){  
str=din.readUTF();  
System.out.println( "客户说:" +str);  
str2=br.readLine();  
dout.writeUTF(str2);  
dout.flush();  
}  
din.close();  
s.close();  
ss.close();  
}}  

文件:MyClient.java

导入 java.net.*;  
导入 java.io.*;  
类我的 客户{  
公共静态void  main(String args[])抛出 异常{    
套接字 s=新 套接字(“本地主机” ,3333 );  
DataInputStream din= new  DataInputStream(s.getInputStream());  
DataOutputStream dout= new  DataOutputStream(s.getOutputStream());  
BufferedReader br= new  BufferedReader( new  InputStreamReader(System.in));   
字符串 str= "" ,str2= "" ;  
而(!str.equals(“停止” )){  
str=br.readLine();  
dout.writeUTF(str);  
dout.flush();  
str2=din.readUTF();  
System.out.println( "服务器说:" +str2);  
}   
dout.close();  
s.close();  
}}  

以上就是关于“Java socket编程详解”的介绍,大家如果想了解更多相关知识,不妨来关注一下动力节点的Java视频教程,里面的课程内容由浅到深,通俗易懂,很适合没有基础的小伙伴学习,希望对大家能够有所帮助哦。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>