这是我的java服务器代码:
public class CaspSocket {
private Socket socket = null;
private PrintWriter out = null;
private BufferedReader in = null;
public CaspSocket(InetAddress caspAddress, int caspPort) throws IOException {
socket = new Socket(caspAddress, caspPort);
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
}
我使用“out”发送数据
out.print(1 + "|");
out.print(2 + "|");
out.print(3 + "|");
将在GameMaker Studio中收到如下内容:
var in_buff = ds_map_find_value(async_load, "buffer");
test_string=buffer_read(in_buff, buffer_string);
这样一切都将被放入一个字符串
test_string = “1 | 2 | 3 |”
但是我希望以连续的方式接收数据
var in_buff = ds_map_find_value(async_load, "buffer");
test_string=buffer_read(in_buff, buffer_string);
test_string2=buffer_read(in_buff, buffer_string);
test_string3=buffer_read(in_buff, buffer_string);
给予
test_string = “1 |” test_string2 = “2 |” test_string3 = “3 |”
如何以连续的方式从java服务器发送数据,以便可以使用GameMaker Studio中的buffer_read(in_buff, buffer_string);
单独读取每个数据块
编辑: 我已经阅读了使用缓冲区部分,问题是当我使用以下方法将GameMaker Studio发送到服务器时:
buffer_seek(Buffer, buffer_seek_start, 0);
buffer_write(Buffer, buffer_string, string(1) + chr(10)); //chr(10) means new line
buffer_write(Buffer, buffer_string, string(2) + chr(10));
buffer_write(Buffer, buffer_string, string(3) + chr(10));
network_send_raw(Socket, Buffer, buffer_tell(Buffer));
java服务器只会发回一个字符串:
var in_buff = ds_map_find_value(async_load, "buffer");
buffer_read(in_buff, buffer_string);
我不知道应该如何使用java服务器按顺序发送它,就像它可以在GM中接收一样:S:
var in_buff = ds_map_find_value(async_load, "buffer");
test_string=buffer_read(in_buff, buffer_string);
test_string2=buffer_read(in_buff, buffer_string);
test_string3=buffer_read(in_buff, buffer_string);
我将只使用buffer_string来简化操作。
答案 0 :(得分:0)
套接字通信基于流的概念。流是简单的字节序列,无法控制它们的发送方式。实际传输由OS协议驱动程序管理,无法从应用程序级别访问。所以基于多种条件
flush()
可以在单个数据包或多个数据包中传送。即使|
方法也只是将数据推送到OS缓冲区,并且不保证实际交付。
因此,要按顺序阅读消息,您应该使用以太