Java简单实现服务器客户端通信
创始人
2024-09-25 03:20:03

目录

    • Socket 概述
    • Socket 通信模型
    • Socket 编程流程
    • DEMO
      • 服务器端
      • 客户端

在Java中实现服务器和客户端的通信,可以使用Java Socket编程。

Socket 概述

Socket 指的是“插座”,是应用层与传输层之间的桥梁,用于在网络上进行双向通信。在 Socket 编程中,客户端与服务器之间的通信需要通过 Socket 进行实现。客户端通过 Socket 向服务器发送请求,服务器接收请求后返回响应,完成整个通信过程。

Socket 通信模型

Socket 通信模型分为两种:TCP 和 UDP。TCP 是一种可靠的传输协议,它保证了数据的完整性和有序性,适用于需要可靠传输的场景;UDP 是一种无连接的传输协议,它不保证数据的完整性和有序性,适用于实时通信、流媒体传输等场景。

Socket 编程流程

Socket 编程流程一般包括以下几个步骤:

创建 Socket 对象(客户端)或 ServerSocket 对象(服务器)。

绑定 Socket 地址。

启动监听进程(服务器)或连接进程(客户端)。

发送或接收数据。

关闭连接。

在这里插入图片描述

DEMO

以下是一个简单的服务器和客户端的例子,它们通过TCP/IP协议通信。

服务器端

Server.java

package socket;  import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket;  public class Server {  	public static void main(String[] args) { 		int port = 8085; 		try (ServerSocket serverSocket = new ServerSocket(port)){ 			System.out.println("服务器启动,等待客户端连接..."); 			while(true) { 				try (Socket socket = serverSocket.accept()){ 					System.out.println("客户端连接成功!"); 					BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));                     PrintWriter out = new PrintWriter(socket.getOutputStream(), true);                                          String message;                     while ((message = in.readLine()) != null) {                         System.out.println("收到客户端消息: " + message);                         out.println("服务器回应: " + message);                     } 				} catch (IOException e) { 					e.printStackTrace(); 				} 			} 		} catch (IOException e) { 			e.printStackTrace(); 		} 	}  }  

客户端

Client.java

package socket;  import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException;  public class Client {  	public static void main(String[] args) { 		String hostname = "localhost"; // 服务器地址         int port = 8085; // 服务器端口         try (Socket socket = new Socket(hostname, port)) {             PrintWriter out = new PrintWriter(socket.getOutputStream(), true);             BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));             BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));              String userInput;             while ((userInput = stdIn.readLine()) != null) {                 out.println(userInput);                 System.out.println("服务器回应: " + in.readLine());             }         } catch (UnknownHostException e) {             System.err.println("未知主机: " + hostname);             e.printStackTrace();         } catch (IOException e) {             System.err.println("I/O错误与主机通信");             e.printStackTrace();         }  	}  }  

在这个例子中,服务器端监听8085端口,等待客户端的连接。客户端连接到服务器后,可以发送消息给服务器,服务器会将收到的消息原样返回给客户端。这个简单的例子展示了基本的Socket编程,但在实际应用中,你可能需要考虑更复杂的协议(如HTTP或自定义协议)和安全性(如SSL/TLS)。

请添加图片描述

相关内容

热门资讯

原创 中... 在阅读文章前,辛苦您点下“关注”,方便讨论和分享。作者定会不负众望,按时按量创作出更优质的内容 文...
影石创新遭巨头“密集攻击”?刘... 来源:市场资讯 (来源:达摩财经) 影石创新日前正式发布全球首款全景无人机“影翎Antigravi...
欧盟调查谷歌利用网络内容支持A... 新华社布鲁塞尔12月9日电(记者丁英华 张兆卿)欧盟委员会9日宣布,对美国谷歌公司利用网络内容为其人...
圣奥化学公布新型绿色防老剂SA... 来源:市场资讯 (来源:中国化工信息周刊) 关键词 | 圣奥化学SA6000开发进展 共 1064字...
人工智能也有“真香定律”!从科... 潮新闻客户端 记者 谢春晖 通讯员 姜慧君 方临明 人工智能浪潮奔涌。从率先布局抢占赛道先机,到...