DaniWeb IT Discussion Community

DaniWeb IT Discussion Community (http://www.daniweb.com/forums/index.php)
-   Java (http://www.daniweb.com/forums/forum9.html)
-   -   Problem with remote applications interaction using URL (http://www.daniweb.com/forums/thread157723.html)

Antenka Nov 16th, 2008 4:34 pm
Problem with remote applications interaction using URL
 
Hello everyone, beforehand, sorry for my english...
I have to do client - server application. They must interact, using classes URL, URLConnection. I understand, how to send data to server. But I can not realize server work.
The common algorithm of server is:
1. Start.
2. Wait for connection.
3. After receiving connection it must process request.
4. Or back for "2" or exit.

as I understand, client code to send request is:
            URL url = new URL ("http://" + host + ":" + port);
            URLConnection c = url.openConnection();
            c.setDoOutput(true);
            c.connect();
           
            OutputStreamWriter out = new OutputStreamWriter(c.getOutputStream());
            out.write(URLEncoder.encode(request,"UTF-8") );
            out.flush();
            out.close();
please help with server code to catch this connection?

Antenka Nov 17th, 2008 9:24 am
Re: Problem with remote applications interaction using URL
 
Please, at least somebody!
Any help at all would be greatly appreciated!

dickersonka Nov 17th, 2008 9:42 am
Re: Problem with remote applications interaction using URL
 
here ya go, just needs slight modification on response and your listening ports

http://www.codeproject.com/KB/IP/tcpclientserver.aspx

dickersonka Nov 17th, 2008 9:42 am
Re: Problem with remote applications interaction using URL
 
sorry, forgot it was java, here's a sample java tcplistener

http://www.koders.com/java/fid857615...7AE75C4F5.aspx

Antenka Nov 17th, 2008 3:39 pm
Re: Problem with remote applications interaction using URL
 
Yeah ... THANKS... IT WORKS (almost). So I have another problem:
server catches the client connections, but when I'm trying to read from InputStream
        BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        //....
       
        String line;
        while ((line = is.readLine()) != null)     
        {
           
                request += "\n" + line;
        }
it reads information:
"
POST / HTTP/1.1
Connection: close
Keep-Alive: 300
User-Agent: Java/1.6.0_07
Host: localhost:2604
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Content-type: application/x-www-form-urlencoded
Content-Length: 38

key1=search%09StudentRecBook%09123"
and after that stops at
        while ((line = is.readLine()) != null)
like waiting for reading something else from stream.
What he is waiting for? Help :)

dickersonka Nov 17th, 2008 3:51 pm
Re: Problem with remote applications interaction using URL
 
i don't think it will return null, until the socket gets closed

not for sure if this is the terminator, but did you check for "." (period) with crlf?

also check -1

Antenka Nov 17th, 2008 4:01 pm
Re: Problem with remote applications interaction using URL
 
I already tried -1 - same. And I took "null" from java help
Quote:

java.​io.​BufferedReader
public String readLine() throws IOException
Reads a line of text. A line is considered to be terminated by any one of a line feed ('\n'), a carriage return ('\r'), or a carriage return followed immediately by a linefeed.
Returns:
A String containing the contents of the line, not including any line-termination characters, or null if the end of the stream has been reached
Can you tell what you mean as period?

dickersonka Nov 17th, 2008 4:03 pm
Re: Problem with remote applications interaction using URL
 
nm, think i was thinking of something else

can you please post the server and client code, at least the guts part where its sending and receiving

Antenka Nov 17th, 2008 4:14 pm
Re: Problem with remote applications interaction using URL
 
Server:
private Socket socket = null;
private BufferedReader is = null;
private PrintWriter os = null;
private String request = "";
private ServerSocket ss = null;
private int port = 2604;

public void run()
    {
        try
        {

            String line;
            while ((line = is.readLine()) != null) {
                request += "\n" + line;
            }
                       
            System.out.println("Request from ctient: " + request);
            System.out.println("Processing...");
            String msgToReport = AnalyzeEntryRequest(request);
            System.out.println("Sending: " + msgToReport);
            os.println(msgToReport);
            os.flush();
        }
        catch (IOException e)
        {
            System.out.println("Ошибка ввода-вывода. " + e);
        }
        finally
        {
            try
            {
                is.close();
                os.close();
                socket.close();
                System.out.println("Клиент " + socket + " отсоединен.");
            }
            catch (IOException e)
            {
                System.out.println("Ошибка закрытия сокетов. " + e);
            }
        }
    }
private boolean InitServer()
    {
        boolean res = true;
       
        try
        {
            is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            os = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())));
        }
        catch (IOException e)
        {
            System.out.println("Ошибка создания потоков. " + e);
        }
        new  Thread (this).start();
        System.out.println("Запуск сервера.");

        return res;
    }

Client:
    private String sendRequest(String request)
    {
        String result = "";
        this.host = jTextField7.getText();
        InputStream in = null;
        OutputStreamWriter out = null;
        try
        {
            URL url = new URL ("http://" + host + ":" + port);
            URLConnection c = url.openConnection();
            c.setDoOutput(true);
            c.connect();
           
            out = new OutputStreamWriter(c.getOutputStream());

            String data =  URLEncoder.encode("key1", "UTF-8") + "=" + URLEncoder.encode(request, "UTF-8") + "\r\n\r\n";
           
            out.write(data);           
            out.flush();

            out.close();
           
            BufferedReader rd = new BufferedReader(new InputStreamReader(c.getInputStream()));
            String line;
            while ((line = rd.readLine()) != null)
            {
           
                result += "\n" + line;
            }

            in.close();
        }
        catch (Exception e)
        {
            JOptionPane.showMessageDialog(jTextPane1,"Ошибка передачи данных. " + e);
        }
       
        return result;
    }
There was no case in which server send response and client recieves it. So It can be mistakes there...

Antenka Nov 17th, 2008 5:35 pm
Re: Problem with remote applications interaction using URL
 
oops.. sorry for russian messages. It is only messages like "Server started" or "IO error". If it necessary I can translate it... :)


All times are GMT -4. The time now is 6:53 pm.

Forum system based on vBulletin Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
©2003 - 2009 DaniWeb® LLC