在java中连续地通过套接字传输数据

 永远只要做好自己的16号 发布于 2023-02-07 11:23

我想通过推送和拉动异步发送/接收从一个端点到另一个端点(peer2peer)的连续数据流

因此,为了首先解决通信,我开始使用jax-ws soap绑定webservice,因为它有一个端点和推送机制的ws-addressing,但它似乎是很多开销(根据文档很重,因为不熟悉ws-*,我没有实现它,因为我需要多个客户端稍后监听流,并且流是24/7我想要线程可管理的套接字).

然后我拿了jax-rs但它不包含ws-addressing.(jax-rs 2.0)我也查看了websockets但它需要一个app服务器但是我想要一个jvm可支持的代码

所以,现在我正在尝试使用基本套接字,但我遇到的问题是通过服务器上的套接字流式传输数据,客户端不断接收它.这是第一次阅读,但没有进一步.其次,我怎样才能使它异步?

public class sSocket {  
public static void main(String args[]) throws IOException{  
    int i = 15000;
    ServerSocket ss;
    Socket socket = null;
    ss = new ServerSocket(i);        
    try
    {
        socket = ss.accept();
        socket.setKeepAlive(true);          

           int iii = 0;            
               System.out.println("New connection accepted " +  socket.getInetAddress() + ":" + socket.getPort());   
               BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
               BufferedWriter output = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

           while(iii<9)
           {
               Thread.sleep(2000);
               output.write("good" + iii + "\n");
               //System.out.print(input.readLine().toString());
               output.flush();
               iii++;
           }
               //socket.close();
       }        

    catch(IOException e)
    {
        e.printStackTrace();
    }   
}
}

public class cSocket {  
public static void main(String args[]) throws InterruptedException, IOException{
    Socket client = new Socket("127.0.0.1", 15000);     
try{
    client.setKeepAlive(true);
    DataOutputStream out = new DataOutputStream(client.getOutputStream());
    out.writeBytes("Hi Server! I'm " + client.getLocalSocketAddress() + "\n" );     
     BufferedReader input = new BufferedReader(new InputStreamReader(client.getInputStream()));
     String s;       
     while(true){
     if((s = input.readLine()) != null)
    {
        System.out.println("Message from Server: " + s);
    }}
     //client.close();
    }
    catch(Exception e){
    e.printStackTrace();
    }
}
}

[toString()不可用 - 没有挂起的线程]我看到这停止了eclipse中的代码.问题似乎基本上是在客户端的input.readLine()根源:错误是连接重置:我假设是因为readLine()已达到"EOF"

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有