Java Socket 一次连接无限次交互数据,while实现,2020-09-10

原理: Socket是对TCP连接的封装,TCP本身就是支持长连接交互的。   在Socket两端都持有一个输出流、输入流, 保持流不被关闭,且相互监听对方的输出,即实现保持长连接交互数据。

 

以下为实现代码。

注意两点
1.双方数据是通过流模式传输,多次交互场景下,流模式没办法判断哪里为单次交互的结束,所以手动设定标识 “over”为单次交互的结束。
2.不要关闭流,让其保持连接,推送数据使用flush();

服务端代码

package com.heiniao.springioc.socket;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;

public class Service {

    public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket(9898);

        while(true) {
            Socket socket = server.accept();
            new Thread(
                    new Runnable() {
                        @Override
                        public void run() {
                            try {
                                while(t
Java中通过Socket实现连接和短连接的方式如下: 1. 长连接: 在客户端和服务器端建立连接之后,客户端和服务器端保持连接状态,不主动关闭连接。客户端和服务器端可以随时发送和接收数据,直到其中一方关闭连接或者网络出现问题导致连接中断。 2. 短连接: 在客户端和服务器端完成一次数据交互之后,客户端主动关闭连接。服务器端在接收完客户端的数据之后也关闭连接。当客户端需要再发送数据的时候,需要重新建立连接。 下面是一个简单的Java代码示例,演示如何实现Socket的长连接和短连接: 1. 长连接: ```java // 客户端代码 Socket socket = new Socket("127.0.0.1", 8888); while (true) { OutputStream outputStream = socket.getOutputStream(); String message = "我是客户端,发送消息给服务器端"; outputStream.write(message.getBytes()); outputStream.flush(); InputStream inputStream = socket.getInputStream(); byte[] buffer = new byte[1024]; int len = inputStream.read(buffer); String result = new String(buffer, 0, len); System.out.println("服务器端返回的消息:" + result); Thread.sleep(1000); } // 服务器端代码 ServerSocket serverSocket = new ServerSocket(8888); Socket socket = serverSocket.accept(); while (true) { InputStream inputStream = socket.getInputStream(); byte[] buffer = new byte[1024]; int len = inputStream.read(buffer); String message = new String(buffer, 0, len); System.out.println("客户端发送的消息:" + message); OutputStream outputStream = socket.getOutputStream(); String result = "我是服务器端,发送消息给客户端"; outputStream.write(result.getBytes()); outputStream.flush(); } ``` 2. 短连接: ```java // 客户端代码 Socket socket = new Socket("127.0.0.1", 8888); OutputStream outputStream = socket.getOutputStream(); String message = "我是客户端,发送消息给服务器端"; outputStream.write(message.getBytes()); outputStream.flush(); InputStream inputStream = socket.getInputStream(); byte[] buffer = new byte[1024]; int len = inputStream.read(buffer); String result = new String(buffer, 0, len); System.out.println("服务器端返回的消息:" + result); outputStream.close(); inputStream.close(); socket.close(); // 服务器端代码 ServerSocket serverSocket = new ServerSocket(8888); Socket socket = serverSocket.accept(); InputStream inputStream = socket.getInputStream(); byte[] buffer = new byte[1024]; int len = inputStream.read(buffer); String message = new String(buffer, 0, len); System.out.println("客户端发送的消息:" + message); OutputStream outputStream = socket.getOutputStream(); String result = "我是服务器端,发送消息给客户端"; outputStream.write(result.getBytes()); outputStream.flush(); outputStream.close(); inputStream.close(); socket.close(); ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值