Avatar billede mtilsted Nybegynder
28. marts 2001 - 20:39 Der er 1 kommentar og
1 løsning

Socket problem

Jeg har et problem med et java program.
Af en eller anden grund læser mit java program ting som serveren ikke sender.
Aabner man http://php.maxtransfer.com/GetLogPreMade.php
i en browser findes stringen 190 ikke. Men hvis mit program læser siden ind, skriver den blandt andet 190 i det output den laver. Er der nogle der har en ide om hvorfor??

------------------- Program --------------

import java.util.*;
import java.io.*;
import java.net.*;
import javax.swing.*;

class HTTPParserTest
{
    final static String CRLF = \"\\r\\n\";
    static String Server=\"php.MAXtransfer.com\";
    final static String UserAgent=\"User-Agent: MaxTransfer 0.9.9\";

    public static void main(String Args[])
    {
        Socket HTTPSocket;
//        BufferedReader Input;
        InputStreamReader Input;
        OutputStream OutputRaw;
//        PrintWriter OutputPrinter;

        try
        {
            HTTPSocket= new Socket(\"php.MAXtransfer.com\",80);
//            HTTPSocket=new Socket(\"www.w3.org\",80);

//            Input = new BufferedReader( new InputStreamReader( HTTPSocket.getInputStream() ) );
            Input = new InputStreamReader(HTTPSocket.getInputStream());
            OutputRaw = HTTPSocket.getOutputStream();
//            OutputPrinter = new PrintWriter( OutputRaw, true );  // true => automatisk flushing ved println

            String Req=BuildPostRequest(\"/GetLogPreMade.php\",\"Version=1\");
//            String Req=BuildPostRequest(\"/Protocols/HTTP/1.1/rfc2616.txt\",\"Version=1\");
            System.out.println(\"Request is \" + Req);

            OutputRaw.write(Req.getBytes());
OutputRaw.flush();
            System.out.println(\"\\nResponce\");

            String Data;
            char Mem[]=new char[400000];
            int ReadSize=Input.read(Mem);
OutputRaw.close();

            for(int i=0;i!=ReadSize;i++)
            {
                System.out.print(new Character((char)Mem[i]).charValue());   
            }

//            System.out.println(new String(Mem,0,ReadSize));

        }
        catch(Exception e)
        {
            System.out.println(e);   
        }
    }

    static public String BuildPostRequest(String PostUrl,String PostData)
    {
        String Str=\"GET \" + PostUrl + \" HTTP/1.1\" + CRLF +
        \"Host: \" + Server + CRLF +
//        \"Connection: Close\" + CRLF +

        \"Accept-Language: en\" + CRLF +
        \"CacheControl: no-cache,no-transform\" + CRLF +
//        \"Content-Type: application/x-www-form-urlencoded\" + CRLF +
//        \"Content-Type: application/chunked\" + CRLF +
//        \"Content-Length: \" + PostData.length() + CRLF + CRLF;
//        + CRLF +
        CRLF;
        return(Str);
    }
}



Avatar billede mtilsted Nybegynder
28. marts 2001 - 21:07 #1
ARG! det var den forkerte source. Man flusher ikke input!!. Her kommer den rigtige.

----------------------------

import java.util.*;
import java.io.*;
import java.net.*;
import javax.swing.*;

class HTTPParserTest
{
    final static String CRLF = \"\\r\\n\";
    static String Server=\"php.MAXtransfer.com\";
    final static String UserAgent=\"User-Agent: MaxTransfer 0.9.9\";

    public static void main(String Args[])
    {
        Socket HTTPSocket;
        InputStreamReader Input;
        OutputStream OutputRaw;

        try
        {
            HTTPSocket= new Socket(\"php.MAXtransfer.com\",80);

            Input = new InputStreamReader(HTTPSocket.getInputStream());
            OutputRaw = HTTPSocket.getOutputStream();

            String Req=BuildPostRequest(\"/GetLogPreMade.php\",\"Version=1\");
            System.out.println(\"Request is \" + Req);

            OutputRaw.write(Req.getBytes());
            OutputRaw.flush();
            System.out.println(\"\\nResponce\");

            String Data;
            char Mem[]=new char[40000];
            int ReadSize=Input.read(Mem);

            for(int i=0;i!=ReadSize;i++)
            {
                System.out.print(new Character((char)Mem[i]).charValue());   
            }
            System.out.println(new String(Mem,0,ReadSize));

        }
        catch(Exception e)
        {
            System.out.println(e);   
        }
    }

    static public String BuildPostRequest(String PostUrl,String PostData)
    {
        String Str=\"GET \" + PostUrl + \" HTTP/1.1\" + CRLF +
        \"Host: \" + Server + CRLF +
//        \"Connection: Close\" + CRLF +

        \"Accept-Language: en\" + CRLF +
        \"CacheControl: no-cache,no-transform\" + CRLF +
//        \"Content-Type: application/x-www-form-urlencoded\" + CRLF +
//        \"Content-Type: application/chunked\" + CRLF +
//        \"Content-Length: \" + PostData.length() + CRLF + CRLF;
//        + CRLF +
        CRLF;
        return(Str);
    }
}



Avatar billede mtilsted Nybegynder
29. marts 2001 - 00:05 #2
Jeg har fundet løsningen. Php bruger Chunked overførsel, saa de extra data jeg fik var størelsen paa de data kom.

Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester