当前位置: 首页 > 知识库问答 >
问题:

跨多个套接字的原子套接字消息

齐驰
2023-03-14

我有几个关于Java套接字编程的问题。

>

  • 我有一个进程需要跨多个套接字连接发送一条消息。现在我有如下内容

    Socket[] connections; //Already initialized with all connections
    
    for i=0 to connections.length - 1
        Send Message across connection[i]; // a new PrintWriter linked to the output stream
    

    这是原子能的吗?或者,在并发环境中,它们是否有可能在几乎相同的时间发送?

    在并发环境中,套接字连接(设置为PrintWriter)的输出流是否已经互斥?比如说,两个线程想要同时写入PrintWriter。如果没有在PrintWriter上显式互斥,流的任何输出都会被弄乱吗?

  • 共有1个答案

    郎永福
    2023-03-14

    这是原子能的吗?或者,在并发环境中,它们是否有可能在几乎相同的时间发送?

    不知道你在问什么。多个线程不能同时使用< code>Socket对象。如果套接字对象被并发访问,您将需要围绕它进行同步。

    如果你问是否所有的消息都将由一个线程“同时”发送,那么答案是“视情况而定”。单个线程可以很快做到这一点,但是如果任何发送操作由于任何原因而阻塞,那么它可能不会。这在很大程度上取决于消息的大小和套接字被写入的频率。

    在并发环境中,到套接字连接(设置为PrintWriter)的输出流是否已经相互排斥?

    如果查看PrintWriter代码,可以看到所有操作都已同步。这意味着可以从PrintWriter并发写入套接字。例如:

    public void println(int x) {
        synchronized (lock) {
            print(x);
            println();
        }
    }
    
     类似资料:
    • 当我进行套接字编程时,我无法清楚地理解。 我的理解是 如果我使用此选项打开套接字,表示我可以在header之前创建自己的header,但最终数据以 /code>协议的格式发送。我的理解是正确的。如果错了,可以一些解释。 谢谢

    • 问题内容: 我试图理解SocketChannels和NIO。我知道如何使用常规套接字,以及如何制作一个简单的每客户端线程服务器(使用常规阻塞套接字)。 所以我的问题是: 什么是SocketChannel? 当使用SocketChannel而不是Socket时,我还能得到什么呢? 通道和缓冲区之间是什么关系? 什么是选择器? 文档中的第一句话是。那是什么意思? 我也阅读了本文档,但是不知何故…… 问

    • socket_read和socket_recv之间有什么区别?我正在尝试使用PHP套接字,但使用socket_read时收到了以下警告: 请帮帮我!

    • 我编写了一个基于Netty4的REST服务器。客户端处理程序如下所示。 netty提供的msg中的bytebuffer容量各不相同。当客户端消息大于缓冲区时,消息将被拆分。我发现每个片段都调用channelRead和ChannelReadComplete。我通常看到的是ByteBuf在512左右,message在600左右。对于前512个字节,我得到一个channelRead,然后是一个Chann

    • 我在询问之前搜索了这个问题,但我找不到类似的东西。我开发了一个客户端/服务器解决方案来发送/接收HL7消息。我使用套接字将客户端连接到服务器,从这个连接中,我只能使用OutputSteam对象发送1条HL7消息。我如何在同一个套接字连接中发送多个HL7?我尝试了不同的方法,但它们不能正常工作。 以下是我的客户端代码: 从服务器端 如何在同一套接字连接中发送更多HL7消息?

    • 我有这个tcp插座 接受一条消息,将其转换为字符串并显示它,但是如果连接没有被客户端关闭,我就不能像预期的那样看到服务器上显示的消息 如何在不需要关闭客户端连接的情况下(由客户端)从客户端发送多条消息? 这里是NodeJs中的客户端 谢谢valeriano cossu