当前位置: 首页 > article >正文

Java简单实现服务器客户端通信

目录

    • 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)。

请添加图片描述


http://www.kler.cn/a/292678.html

相关文章:

  • Linux——GPIO输入输出裸机实验
  • Servlet入门 Servlet生命周期 Servlet体系结构
  • git配置远程仓库的认证信息
  • 封装一个省市区的筛选组件
  • python制作一个简单的端口扫描器,用于检测目标主机上指定端口的开放状态
  • 量化交易系统开发-实时行情自动化交易-3.4.2.2.Okex交易数据
  • 0to1使用JWT实现登录认证
  • ubuntu24下安装pytorch3d
  • ARM 伪指令 (26)
  • 2024年高教社杯数学建模国赛赛题浅析——助攻快速选题
  • 【系统架构设计师】论文:论SOA在企业集成架构设计中的应用
  • 【Rust光年纪】探索Rust嵌入式开发利器:从硬件访问到USB绑定
  • Ubuntu设置
  • Spring Boot实现License生成和校验
  • Java中的Stream流
  • wsl2 安装qt5
  • gdb使用
  • 【运维监控】influxdb 2.0+telegraf 监控tomcat 8.5运行情况(2)
  • 使用文件系统管理硬件设备
  • 深入探索 Go 语言的编译器与垃圾回收机制
  • 深圳又有5家企业高新企业资质被取消?
  • Redis在服务器启动的日志问题
  • RestTemplateRibbonOpenFeign
  • Java 可变参数
  • Canvas 在 微信小程序-uni-APP 和 H5 中的使用差异
  • JavaWeb - Mybatis - 动态SQL