当我的程序在循环InputStreamReader#read()
之后停止工作时,我最近搞乱了套接字并在它们之间传输数据。
我完全不知道为什么会发生这种情况,我将不胜感激任何帮助:)
这是我的代码:
public class SocketClient
{
public static void main(String[] args)
{
String host = "localhost";
int port = 19999;
String instr = "";
System.out.println("SocketClient initialized");
try
{
InetAddress address = InetAddress.getByName(host);
Socket connection = new Socket(address, port);
BufferedOutputStream bos = new BufferedOutputStream(connection.getOutputStream());
OutputStreamWriter osw = new OutputStreamWriter(bos, "US-ASCII");
String process = "{\"processType\":\"retrieveCoin\",\"uuid\":\"82012e57-6a02-3233-8ee5-63cc5bb52cd1\"}" + (char) 13;
System.out.println("Querying Data Server: " + process);
osw.write(process);
osw.flush();
System.out.println("Sent data successfully.");
BufferedInputStream bis = new BufferedInputStream(connection.getInputStream());
System.out.println("bis");
InputStreamReader isr = new InputStreamReader(bis, "US-ASCII");
System.out.println("isr");
int c;
System.out.println("ic");
while ((c = isr.read()) != 13)
{
System.out.println("iwl " + ((char) c));
instr += ((char) c);
}
System.out.println("awl");
connection.close();
System.out.println("Recieved data: " + instr);
}
catch (Exception ex)
{
System.out.println("Exception: " + ex);
}
}
}
控制台输出正常,直到while循环结束,因为“awl”消息不会打印,或之后的任何其他内容。
套接字的接收端(“服务器”)获取消息正常,并且还正确地发送数据(我在套接字服务器上也使用了一些调试消息)。
请有人帮助我,我在这里快死了!
答案 0 :(得分:4)
据推测,远程方从不发送" \ r" (或ascii 13) -
while ((c = isr.read()) != 13)
{
System.out.println("iwl " + ((char) c));
instr += ((char) c);
}
所以你的循环被阻塞,等待读取的结果。 (你应该检查-1,这是通道的结尾)。来自Javadoc,
读取的字符,如果已到达流的末尾,则返回-1
并且,-1
不是13
。
答案 1 :(得分:1)
我很确定你的“服务器”进程不会发送13个字符。
您可能想要做的是返回stuff + (char) 13