gpt4 book ai didi

javascript - Java Server Socket 传输 String 到 web socket

转载 作者:行者123 更新时间:2023-11-29 08:48:49 25 4
gpt4 key购买 nike

我的目标是在 Java 服务器套接字和浏览器之间建立连接(使用网络套接字)。到目前为止,连接有效,但我的数据流没有。我想从服务器套接字发送一个字符串到网络套接字。

问题是输入和输出流。 Web 套接字将“zustimmung”发送到服务器套接字,服务器套接字由 in.readLine()run() 中读取。但这并没有读取字符串,它读取的是“GET/HTTP/1.1”。

输出也不起作用(我猜这是由于 writeUTF())。

所以我的问题是:我可以使用哪些数据流在 Web 套接字和服务器套接字之间传输字符串?

代码服务器:

import java.net.*;
import java.io.*;

public class ServerCommunicator extends Thread{

private final static int PORT = 7777;

private static ServerSocket serverSocket;
private static Server server;

private Socket incoming;
private DataOutputStream out;
private DataInputStream in;

public static void main (String args[])
{
try {
serverSocket = new ServerSocket (PORT);
System.out.println("Waiting for Clients..");

server = new Server();

while (true) {
Socket incoming = serverSocket.accept();
ServerCommunicator communicator = new ServerCommunicator(incoming);
communicator.start();
}
}catch (Exception e) {e.printStackTrace();}
}

public ServerCommunicator (Socket incoming)
{
this.incoming = incoming;

try {
out = new DataOutputStream (incoming.getOutputStream());
in = new DataInputStream (incoming.getInputStream());
} catch (Exception e) {e.printStackTrace();}
}

public void run()
{

try {
String input = in.readLine();
String reply;
reply = server.auszaehlen(input); //returns a String
out.writeUTF(reply);

out.flush();
incoming.close();
} catch (Exception e) {e.printStackTrace();}
}
}

Javascript 代码 HTML:

<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript">
function WebSocketTest()
{
if ("WebSocket" in window)
{
alert("WebSocket is supported by your Browser!");
// Let us open a web socket
var ws = new WebSocket("ws://localhost:7777");
ws.onopen = function()
{
// Web Socket is connected, send data using send()
ws.send("zustimmung");
alert("Message is sent...");
};
ws.onmessage = function (evt)
{
var received_msg = evt.data;
alert("Message is received...");
};
ws.onclose = function()
{
// websocket is closed.
alert("Connection is closed...");
};
}
else
{
// The browser doesn't support WebSocket
alert("WebSocket NOT supported by your Browser!");
}
}
</script>
</head>
<body>
<div id="sse">
<a href="javascript:WebSocketTest()">Run WebSocket</a>
</div>
</body>
</html>

最佳答案

当您使用网络套接字连接时,它会发送一个 HTTP 请求,这不仅仅是一个套接字连接。 HTTP 请求打开套接字,发送一些元信息,然后发送数据。

您在服务器上阅读的是该元信​​息的第一行。对您的服务器的典型 HTTP 请求应该是多行,并且应该如下所示:

GET / HTTP/1.1
Host: example.com
Accept: *

zustimmung

您可能需要阅读多个标题行,然后是一个空白行,然后是您的数据。您的服务器只读取一行。您将需要一个循环来读取多行,查找空行,然后读取您的数据。

Wikipedia has good examples请求和响应应该是什么样子。这是他们的示例响应:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat

关于javascript - Java Server Socket 传输 String 到 web socket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23780651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com