2

こんにちは私はクライアントからのウェブサーバーへの書き込みに関連する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

しかし、PrintWriterのoutオブジェクトで書き込んだ内容は書き込まれず、次に待機状態になります

一方、アプレットは開始されたばかりではありません。サーバープログラムを閉じると、アプレットは次の例外を出します

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)

何が悪いのか教えてください

4

1 に答える 1

6

試す

httpCon.setChunkedStreamingMode(0);

出力ストリームに書き込む前。コンテンツの長さが事前にわからない場合は、常に http 接続でこれを行う必要があります。

于 2011-01-30T17:59:50.510 に答える