Как написать на веб-сервере в Java - PullRequest
2 голосов
/ 30 января 2011

HI У меня проблема в Java, связанная с записью на веб-сервере с клиента. Я использую следующий код, пожалуйста, помогите мне, где я не прав

Для класса сервера

import java.net.ServerSocket;
import java.net.Socket;
import java.io.InputStream;
import java.util.Scanner;
import java.io.InputStreamReader;
import java.io.BufferedReader;

public class Server
{
    public static void main(String args[]){
        try{
            ServerSocket s = new ServerSocket(8080);
            System.out.println("ashish");

            Socket incoming = s.accept();
            System.out.println("the status of the socket="+incoming.isConnected());
            InputStream inStream = incoming.getInputStream();

            InputStreamReader isr=new InputStreamReader(inStream);
            BufferedReader br=new BufferedReader(isr);
            String str=null;
            while((str=br.readLine()).equals("exit")==false){
                System.out.println(str);
            }

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

А для класса клиента, который на самом деле является апплетом, есть следующий код

import java.applet.Applet;
import java.net.URL;
import java.net.HttpURLConnection;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

public class testApplet extends Applet
{

    public void init(){}

    public void start(){
        try{
            URL url = new URL("http://localhost:8080"); 
            HttpURLConnection httpCon = (HttpURLConnection)url.openConnection(); 
            httpCon.setDoOutput(true); 
            httpCon.setRequestMethod("PUT");

            PrintWriter out = new PrintWriter( httpCon.getOutputStream()); 
            out.print("Resource content\n");
            out.print("exit"); 
            out.close();
        }catch(Exception e){
            e.printStackTrace();
        } 
    }

    public void stop(){}

    public void destroy(){}
}

Теперь, когда я запускаю сервер, на сервере отображается только следующее

PUT / HTTP/1.1
User-Agent: Mozilla/4.0 (Windows Vista 6.1) Java/1.6.0
Host: localhost:8080
Accept: text/html, image/gif. image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive

Но он не записал содержимое, которое я пишу объектом out PrintWriter и затем переходит в состояние ожидания

с другой стороны, апплет не запускается, а только запускается. и когда я закрываю серверную программу, то апплет выдает следующее исключение

java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(Unknown Source)
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at sun.net.NetworkClient.doConnect(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at java.net.HttpURLConnection.getResponseCode(Unknown Source)
    at testApplet.start(testApplet.java:19)
    at sun.applet.AppletPanel.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

Пожалуйста, расскажите, что со мной не так

1 Ответ

6 голосов
/ 30 января 2011

Попробуйте

httpCon.setChunkedStreamingMode(0);

перед записью в outputtream. Вы всегда должны делать это на http-соединениях, если длина контента заранее не известна.

...