socket在与Heroku一起部署的Java web应用上运行ServerSocket
我正在构建一个Java web应用程序,我想使用socket与客户机通信。但由于某种原因,我的客户总是会出现“连接超时”错误。在与Heroku一起部署的应用程序上使用socket是否存在特定问题
我的服务器代码是:
@RequestMapping("/")
String index() {
GreetServer server = new GreetServer();
server.startSocket(Integer.parseInt(System.getenv("PORT")));
return "index";
}
public class GreetServer {
private ServerSocket serverSocket;
private Socket clientSocket;
private PrintWriter streamOut;
private BufferedReader streamIn;
public String startSocket(int port) {
try {
serverSocket = new ServerSocket(port);
clientSocket = serverSocket.accept();
streamOut = new PrintWriter(clientSocket.getOutputStream(), true);
streamIn = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String greeting = streamIn.readLine();
if ("hello server".equals(greeting)) {
streamOut.println("hello client");
}
else {
streamOut.println("unrecognised greeting");
}
return greeting;
}
catch (Exception ex) {
try {
if(clientSocket != null)
clientSocket.close();
if(serverSocket != null)
clientSocket.close();
}
catch(Exception ex1) {}
return ex.getMessage();
}
}
}
我的客户代码是:
public static void main(String[] args) {
GreetClient client = new GreetClient();
client.startConnection("myappname.herokuapp.com", 26515);
String response = client.sendMessage("hello server");
}
public class GreetClient {
private Socket clientSocket;
private PrintWriter out;
private BufferedReader in;
public void startConnection(String ip, int port) {
try
{
clientSocket = new Socket(ip, port);
System.out.println("Socket created (socket == null: " + clientSocket == null + ").");
out = new PrintWriter(clientSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
}
catch(Exception ex)
{
System.out.println("Exception " + ex.getMessage());
}
}
public String sendMessage(String msg) {
try {
out.println(msg);
String resp = in.readLine();
return resp;
}
catch(Exception ex) {
System.out.println("Exception " + ex.getMessage());
return ex.getMessage();
}
}
}
提前感谢
共 (0) 个答案