【问题标题】:multi function socket java, socket vs NIO socket多功能socket java,socket vs NIO socket
【发布时间】:2017-11-19 20:36:31
【问题描述】:

放轻松,我是套接字编程的新手。

我正在制作一个类似于 Teamviewer 的程序。我可以制作一个简单的多线程服务器/客户端应用程序。但问题是我无法弄清楚如何做这样的事情: 假设我有服务器和一个连接到服务器的客户端。 我可以将文件从客户端传输到服务器。我可以与客户进行简单的聊天。但我的问题是:如何在文件同时传输时与客户聊天?我的意思是我一次不能做一个以上的功能。因为我们只有一个输入和一个输出用于服务器和客户端。那么我如何向客户端发送更多的一个功能,客户端如何一次读取更多的一个功能并响应请求? 我做了类似的事情:我向客户端发送了一个请求,我在一个包含新 DataInputStream 的新线程中得到了响应,但我无法弄清楚主 DataInputStream 将如何从客户端接收新响应,因为正在接收请求这种方式就是新的DataInputStream。我真的迷失在这种情况下,因为我觉得我的概念完全错误,但我无法找出正确的概念来做这样的事情。 是否可以使用 ServerSocket 或者我应该看一下 NIO Socket 吗?

注意: 我不想要一段代码,我想了解整个操作的概念。谢谢

【问题讨论】:

    标签: java sockets


    【解决方案1】:

    在单个连接上使用基于数据包的按摩系统

    传出

    {"type":"chat", "message":"hi"}
    {"type":"xfer", "fileName":"fileX", "data":"some_binary_data"}
    

    传入

    switch(getString("type")){
    
        case "chat":
            System.out.println("User said" + getString("message"));
            break;
    
        case "xfer":
            File f = new File(getString("fileName"));
            f.write(getString("data"));
            break;
    
        ...
    }
    

    显然,如果二进制文件相当大,您应该将其分解为许多不同的消息并在另一端重新组合,这将允许聊天消息在传输过程中通过网络传输。

    【讨论】:

    • 感谢您的解决方案。第一个实际上需要的不仅仅是我认为的端口,我不喜欢使用它。第二个,我试过了,但问题就在这里。当我开始像示例屏幕共享一样开始时,它工作正常,但如果我想发送另一个功能:我得到了一个响应,但随后我在线程“Thread-3”java.lang.NullPointerException 中遇到异常,这意味着数据不能根本没有到达。这就是我开始迷路的地方。正如我认为的那样,因为我正在使用一个输入和输出。但我真的不知道这是怎么回事!即使我将它们添加到线程中,得到相同的结果
    • 现在这涉及到一个非常具体和复杂的问题,没有代码就不可能解决任何问题。您将需要正确管理所有使用套接字的消息和线程。我给出的只是关于如何完成它的简单理论,单独的伪代码不是线程安全的。
    • 我对你刚才所说的很满意,我想在继续之前确定我的方向是正确的。如果你说的解决方案可行,我将开始在这里编写一些代码来解决问题。我可以编辑这个问题以添加服务器/客户端代码吗?对不起,我是新来的,很抱歉我的英语不好。
    猜你喜欢
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    相关资源
    最近更新 更多