我正在创建一个java客户端程序,它向服务器发送一个命令,服务器会发回一个确认和一个响应字符串。
响应以这种方式发回
客户-
服务器-
服务器-
当我尝试读取输入时,我只能读取一个输入流的确认消息
我的客户端程序能够以某种方式读取消息(hacky方法)。要读取输入,我必须使用Bufferedreader读取ack msg。
客户JAVA
try {
Socket clientSocket = new Socket(SERVER_ADDRESS, TCP_SERVER_PORT);// ip,port
System.out.println(" client Socket created .. ");
PrintWriter outToServer = new PrintWriter(clientSocket.getOutputStream(), true);
String ToServer = command;
outToServer.println(ToServer);
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
//
// while (!in.ready()) {
// }
System.out.println(in.read()); // Read one line and output it
// ===
byte[] messageByte = new byte[1000];//assuming msg size -need to know eact msg size ?
boolean end = false;
String dataString = "";
int bytesRead = 0;
try {
DataInputStream in1 = new DataInputStream(clientSocket.getInputStream());
//
while (!end) {
bytesRead = in1.read(messageByte);
dataString += new String(messageByte, 0, bytesRead);
if (dataString.length() > 0) {
end = true;
}
}
System.out.println("MESSAGE: " + dataString);
} catch (Exception e) {
e.printStackTrace();
}
// ===
in.close();
clientSocket.close();
System.out.print("connection closed");
} catch (Exception e) {
System.out.print("Whoops! It didn't work!\n");
e.printStackTrace();
}
输出
客户端套接字创建...
答复:6
信息:³CO³0Œ
连接已关闭
当我跳过第一步
客户端套接字创建...
留言:-
连接已关闭
如何编写从服务器(msg)读取所有输入的代码
参考了如何在服务器套接字JAVA中读取所有Inputstream
谢啦
InputStream input = null;
OutputStream output = null;
Socket cs = new Socket("LocalHost", 6789);
input = cs.getInputStream();
output = cs.getOutputStream();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(output));
bw.write("Send your String");
bw.flush();
int bytesRead = 0;
byte[] messageByte = new byte[1000];
String dataString = "";
bytesRead = input.read(messageByte);
dataString = new String(messageByte, 0, bytesRead);
您不能在同一个基础套接字上同时使用BufferedReader和DataInputStream。您将丢失BufferedReader中的数据。在套接字的生命周期内,对所有内容使用相同的流或读取器。写入器和输出流也是如此。
这些语句强制在发送至少1个html" target="_blank">字节后立即关闭流。
dataString += new String(messageByte, 0, bytesRead);
if (dataString.length() > 0) {
end = true;
}
一旦收到ack 6,连接就关闭了。如果忽略ack,响应可能以多个数据包发送,连接将在收到第一个数据包后关闭。
您必须能够确定ack和响应何时结束。
我正在创建一个Java客户机程序,它向服务器发送一个命令,然后服务器返回一个确认和一个响应字符串。 响应以这种方式发回 客户端代码 public static void readStream(InputStream in){ 输出 客户端读取的完整响应 谢谢
问题内容: 简单的脚本在这里: a) 不断从套接字读取并将值存储在关联数组中 b) 不断从stdin读取值并响应t / f(如果它们已存在于关联数组中) a和b是随机事件,不以任何方式关联。 诀窍是从两个子流程访问数组(因为将流程放在后台会将其作为子流程生成) 我正在考虑最好的策略,并且出现了一些想法,但是我想知道是否有人有更好的想法: 1) 将输入从套接字重定向到stdin作为子进程,并在一个w
我正在使用TCP / IP流编写客户端服务器Java程序,我的服务器连接到oracle数据库。当客户端请求一些信息时,服务器处理查询,即返回一个包含一些行的列(例如 5)。我想将整列发送回客户端,我能够发送和接收单行数据,但不能发送和接收多行(因为表包含许多行 i,e 行)....任何帮助都是可取的
[服务器]:
创建 TCP 客户端 最简单的方法来创建一个 TCP 客户端,使用默认选项如下所示: NetClient client = vertx.createNetClient(); 配置 TCP 客户端 如果你不想使用默认值,则创建TCP 客户端时,通过传入NetClientOptions实例可以配置: NetClientOptions options = new NetClientOptions().s
问题内容: 我要进行最简单的解释。我的Java TCP项目有一个服务器和三个客户端。 服务器具有一个ClientThread。每个客户端都有一个ServerThread和一个UserThread。 工作流程为: 1.客户端(例如,client_0)的UserThread获取用户输入,然后将消息发送到服务器。 2.服务器的ClientThread捕获来自client_0的消息,并将另一条消息发送到另