【问题标题】:read socket data with java用java读取套接字数据
【发布时间】:2015-05-14 12:36:09
【问题描述】:

我正在使用 websocket 发送数据,这是代码(javascript)

  socket= new WebSocket('ws://localhost:10302/socket');
                      socket.onopen= function() {
                          socket.send('delete structure'+c);
                      }

在服务器端,我使用的是 java,这是代码

try {
        standardiste = new ServerSocket(10302);
        while(true) {
            System.out.println("listening data from socket");
            socket = standardiste.accept();
            try {

                BufferedReader  entree = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                while(entree!=null)
                {

                System.out.println(entree.readLine());
                }
            }
            catch(IOException exc) {
            }
            socket.close();
        }
    }

我想读取发送的数据?

【问题讨论】:

  • 您的服务器代码表明您连最基本的 WebSocket 协议 (RFC 6455) 都不了解。您应该在开始编码之前学习它。基本上,您应该选择并使用支持 WebSocket 协议的服务器端解决方案。例如TyrusJetty

标签: java javascript sockets


【解决方案1】:

你需要的是

String line;
while((line = entree.readLine()) != null){
    System.out.println(line);
}

您尝试将 BufferedReader 绑定到 Socket 中,但从不从中读取任何内容。这就是 BufferedReader.readLine() 方法的用武之地,它从缓冲区中读取一行(直到到达结束行字符)。

通过将当前行与 null (readLine() != null) 进行比较,您可以继续阅读,直到它停止接收传输结束。

编辑:

恐怕 WebSocket 协议与 Java Socket 协议不同,因此它只接收标头,但不识别任何正在发送的实际数据,这很简单,因为协议不匹配。尝试使用 Java WebSocket 类。这是一个很好的教程。

【讨论】:

  • 通过这段代码我得到了很多信息,但没有通过套接字发送的数据
  • 我得到:GET /socket HTTP/1.1 主机:localhost:10302 连接:升级编译指示:无缓存缓存控制:无缓存升级:websocket 来源:localhost:8080Sec-WebSocket-Version : 13 用户代理: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36 Accept-Encoding: gzip, deflate, sdch Accept-Language: en-US, en;q=0.8,fr;q=0.6,ar;q=0.4 Sec-WebSocket-Key: aPjFF7FlQqh879tJD8d+hg== Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
  • 按照我建议的方式修复它,您的操作方式是从套接字读取数据的最常见方式。所以它一定是 JavaScript 端的东西。也许您可以提供更多背景信息?或者详细说明您在 JavaScript 代码 sn-p 中使用套接字传递的 c 变量是什么。
  • 发送c变量没问题。我只想从客户端套接字接收数据????我的代码给了我其他信息
  • 恐怕 WebSocket 协议与 Java Socket 协议不同,因此它只接收标头,但不识别任何正在发送的实际数据,这很简单,因为协议不不相配。尝试使用 Java WebSocket 类。 Here 是一个很好的教程。
猜你喜欢
  • 2016-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-12
  • 2014-06-07
  • 1970-01-01
相关资源
最近更新 更多