[英]Java: Set non-blocking reading from connected socket
Hello everyone!!!!!!!!!! 大家好!!!!!!!!!! my proxy/server receives requests from a client in this form:
我的代理/服务器以以下形式接收来自客户端的请求:
GET mhttp://proxy_ip:proxy_port/file.mhtml\n
\n
and here's my code: 这是我的代码:
import java.io.*;
import java.net.Socket;
import java.net.ServerSocket;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class ProxyMain {
public static void main(String argv[]) {
int proxyPort = 55554;
String proxyAddr = "127.0.0.1";
ServerSocket proxySocket = null;
try {
proxySocket = new ServerSocket(proxyPort, 50, InetAddress.getByName("127.0.0.1"));
}
catch (Exception e) {
System.err.println("Impossible to create socket server!");
System.out.flush();
System.exit(1);
}
System.out.printf("Server active on port: %d and on address %s\n", proxyPort, proxySocket.getInetAddress());
while (true) {
Socket client = null;
BufferedReader in = null;
PrintWriter out = null;
String request = new String();
String tmp = new String();
try {
client = proxySocket.accept();
System.out.println("Connected to: ");
System.out.println(client.getInetAddress().toString());
System.out.printf("On port %d\n", client.getPort());
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out = new PrintWriter(client.getOutputStream(), true);
}
/*catch (IOException e) {
System.err.println("Couldn't get I/O for connection accepted");
System.exit(1);
}*/
catch (Exception e) {
System.out.println("Error occurred!");
System.exit(1);
}
System.out.println("Received request:");
try{
#####################################
while ((tmp = in.readLine()) != null)
System.out.println(tmp);
request = request + tmp;
#####################################
}
catch (IOException ioe) {
System.err.println("Impossible to read mhttp request!");
System.exit(1);
}
System.out.println(request);
}
}
}
I have a problem in block delimited with #########. 我在用#########分隔的块中遇到问题。 I don't know how to stop the method in.readLine().
我不知道如何在.readLine()中停止该方法。 First it reads: GET mhttp://proxy_ip:proxy_port/file.mhtml\\n then it reads \\n but then it blocks, still waiting to read but the request is finished.
首先,它读取:GET mhttp:// proxy_ip:proxy_port / file.mhtml \\ n,然后读取\\ n,但随后阻塞,仍在等待读取,但请求已完成。 I think that the client keeps the connection alive, even after sending the request but I can't change this because it's my teacher's software.
我认为即使发送请求后,客户端也可以保持连接状态,但是我不能更改它,因为这是我老师的软件。 How can I solve this?
我该如何解决?
don't read an entire line, read a single byte until you encounter a '\\n'
or perform 2 readlines as Greg suggests. 不要读整行,读一个字节,直到遇到
'\\n'
或按照Greg的建议执行2条读线。 in any case, since you know the exact format of the incoming message, adjust your code to read accordingly. 无论如何,由于您知道传入消息的确切格式,因此请调整代码以进行相应的阅读。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.