質問

I am trying to make a Java application that communicates with a PHP script I have online! My application makes one request to receive some data, then processes it and makes another request to the script. However, the second request does not work at all, even though I close() the OutputStreamWriter, the BufferedReader and the HttpsUrlConnection for the first request!

I know it's not the request that it is not working because I send it before anything else, it works! And I also know that the method with the second request in is running. Here is the basics of what I have at the minute:

try{
    URL url = new URL("https://mysite.com/script.php");
    HttpsUrlConnection conn = (HttpsUrlConnection) url.openConnection()
    conn.setDoInput(true); conn.setDoOutput(true);

    String request = URLEncoder.encode("request_type", "UTF-8) + "=" + URLEncoder.encode("first", "UTF-8);
    OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
    writer.write(request);
    writer.flush();

    BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    String response;

    while((response = in.readLine()) != null){
         if(response.equals("firstresponse")){
             in.close(); writer.close();
             conn.disconnect();
             makeSecondRequest();}
    }
}catch(Exception e){}

public void makeSecondRequest(){
    URL url = new URL("https://mysite.com/script.php");
    HttpsUrlConnection conn = (HttpsUrlConnection) url.openConnection()
    conn.setDoInput(true); conn.setDoOutput(true);

    String request = URLEncoder.encode("request_type", "UTF-8) + "=" + URLEncoder.encode("second", "UTF-8);
    OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
    writer.write(request);
    writer.flush();
}

So, if anyone knows how this SHOULD be done/why it may not be working I would be grateful if you could tell me as soon as possible...

Thanks in advance

UPDATE: I have now added e.printStackTrace() in the catch statement in the makeSecondRequest() part of my code and I receive the following:

java.lang.IllegalStateException: Already connected
    at java.net.URLConnection.setDoOutput(URLConnection.java:909)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.setDoOutput(HttpsURLConnectionImpl.java:454)
    at engines.LicenceManagement.sendFingerprint(LicenceManagement.java:193)
    at engines.LicenceManagement.verifyOnline(LicenceManagement.java:147)
    at engines.LicenceManagement.actionPerformed(LicenceManagement.java:541)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
    at java.awt.Component.processMouseEvent(Component.java:6504)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    at java.awt.Component.processEvent(Component.java:6269)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4860)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4686)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Window.dispatchEventImpl(Window.java:2713)
    at java.awt.Component.dispatchEvent(Component.java:4686)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
    at java.awt.EventQueue.access$000(EventQueue.java:101)
    at java.awt.EventQueue$3.run(EventQueue.java:666)
    at java.awt.EventQueue$3.run(EventQueue.java:664)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:680)
    at java.awt.EventQueue$4.run(EventQueue.java:678)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
役に立ちましたか?

解決 2

Don't ask me why because I have no idea, but, I put the second method practically as it was into another class and what do you know, no errors!

I'm not going to investigate as to why at the minute because I want to get my software finished as soon as possible, but if anybody wants to enlighten me on the subject be my guest - I'd be grateful!

他のヒント

The problem is that you never call the connect method. In the first request the connect method is called by the getInputStream() method. So to fix your problem it should be enough to add conn.connect() to your makeSecondRequest method.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top