首页 > 编程语言 >Java中Socket通信的一个注意点

Java中Socket通信的一个注意点

时间:2023-07-07 09:22:42浏览次数:37  
标签:java socket 服务器端 通信 Java client import Socket

在使用socket通信时,我们可能会注意到这样一个现象:

客户端通过新建的Socket对象获取输入流,读取服务器端传输给自己的内容。

Socket socket = new Socket("127.0.0.1", 8086);
InputStream  is = socket.getInputStream();
is.read()

服务器端通过accept方法获取Socket对象,然后再获取输入流,读取客户端传输给自己的内容。

 ServerSocket serverSocket = new ServerSocket(8086);
        Socket client = null;
        while (true){
            client = serverSocket.accept();
            InputStream is = client.getInputStream();
            is.read()
        }

这点就让我很疑惑,为什么同一个InputStream对象,在服务器端可以读取客户端传输内容,在客户端可以读取服务器端传输内容。后来经过验证发现,服务器端accept得到的socket对象和客户端新建的socket对象其实并不是同一个,这样就造成了二者各自获得流对象都是不同的,也就解释了上面的疑问。放入代码证明:

import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;

public class SocketClient {
    public static InputStream is;

    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("127.0.0.1", 8086);
        is = socket.getInputStream();
    }
}
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8086);
        Socket client = null;
        while (true){
            client = serverSocket.accept();
            System.out.println(client.getInputStream()==SocketClient.is);
        }
    }
}

 可能这个问题很低级,知识还是不牢靠啊。

标签:java,socket,服务器端,通信,Java,client,import,Socket
From: https://www.cnblogs.com/rockdow/p/17533887.html

相关文章

  • Java语言语法语义分析器设计与实现
    Java语言词法分析器的设计与实现一.实验目的1.强化对系统软件综合工程实现能力、规划能力的训练;2.加强对词法分析原理、方法和基本实现技术的理解;二.实验内容用C语言(或C++)作为宿主语言完成:     其中具体要求:    1.使用DFA实现词法分析器的设计;    2.实现对Java源程......
  • Java 构造器
    Java构造器1.构造器构造器也叫构造方法,是用来完成对象的初始化。构造器的定义:构造器的定义:[访问修饰符]方法名(形参),构造器与方法不同,并没有返回值,也不能写void,访问修饰符可以是不同的,方法名要与本类的类名相同构造器的调用是由系统在创建对象的时候自动初始化对象。构......
  • JAVA_DAY02
    第二天变量类型变量的作用:存储单个数据1.成员变量类中的变量(独立于方法之外的变量)静态变量(类变量):独立于方法之外的变量,用static修饰。实例变量:独立于方法之外的变量,不过没有static修饰。只声明不赋值存在默认值,整数:0、小数:0.0、字符:false、引用:null2.局部变......
  • java 把map存入文件
    importjava.io.FileWriter;importjava.io.BufferedWriter;importjava.io.IOException;importjava.util.Map;publicclassWriteMapToFile{publicstaticvoidmain(String[]args){Map<String,String>map=//假设已经有一个Map对象try{......
  • 你不知道的JavaScript闭包知识
    原文合集地址如下,有需要的朋友可以关注本文地址合集地址什么是闭包当一个函数能够记住并访问它创建时的词法作用域,即使该函数在其词法作用域之外执行,我们称之为闭包。闭包就像是一个背包,函数和它所需要的变量就像是放在背包里的物品。无论函数在哪里执行,它都能够打开背包并使......
  • this version of the Java Runtime only recognizes class file versions up to 55.0
    问题:  运行SpringBootdemo时报错: thisversionoftheJavaRuntimeonlyrecognizesclassfileversionsupto55.0at原因:   编译版本和运行版本不一致,具体原因是编译版本高于运行版本,SpringBootdemo中使用的是jdk17,我本地的jdk是11 解决:  调整idea中的jd......
  • 自己动手实现rpc框架(二) 实现集群间rpc通信
    自己动手实现rpc框架(二)实现集群间rpc通信1.集群间rpc通信上一篇博客中MyRpc框架实现了基本的点对点rpc通信功能。而在这篇博客中我们需要实现MyRpc的集群间rpc通信功能。自己动手实现rpc框架(一)实现点对点的rpc通信上篇博客的点对点rpc通信实现中,客户端和服务端的ip......
  • ctfshow刷题(Java反序列化)
    CTFshowJava反序列化web846urldns链importjava.io.ByteArrayOutputStream;importjava.io.IOException;importjava.io.ObjectOutput;importjava.io.ObjectOutputStream;importjava.lang.reflect.Field;importjava.net.URL;importjava.util.Base64;i......
  • java 下载多层级zip 压缩包
    1.参数 2.代码实现  3.获取单个文件流程 4. ......
  • Java基础——枚举enum
    一、什么是枚举枚举,顾名思义就是一个个的列出来,和类以及接口是同一个级别的类型,本质就是类(final类)。它用于声明一组命名的常数的集合,当一个变量有几种可能的取值时,可以将它定义为枚举类型。Java中由关键字enum来定义一个枚举类型。 定义一个简单的枚举:这个枚举定义了两个常量......