我的目标是在 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/