2011-01-30 9 views
1

HIクライアントからWebサーバーに書き込む際にJavaで問題が発生します。私は、次のコードを、私は間違っているところServerクラスについてJavaでWebサーバーに書き込む方法

を助けてください

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(){} 
} 

をfolowingているアプレットですクライアントクラス用を使用していますサーバーは次のものだけを表示します

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の出力オブジェクトによって書き込んだネーティブ そして次に待ち状態に入る

一方、アプレットはちょうど開始されていません。そして私は、サーバープログラムを閉じると、アプレットは、次の例外

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) 

を与える私と一緒に間違っているものを教えてください

+0

私はそれがフォーマットされたコードを持っているのに役立つだろうと思ったが、あなたがそれをしたいならば、あなたのソースコードをインデントしなかった。 –

+0

アプレットはどこでサーバーにデータを送信しようとしますか?クライアントはサーバーがデータを送信するのを待っているようです。 –

+0

私はそれを非常に速く見せる時間がありますが、書き込み呼び出しの後でflush()を呼び出していることはありません。また、 "exit"を書いた後で新しい行を送信していないので、サーバーのreadLine()呼び出しはそれを待っているでしょう。 – jhouse

答えて

5

はOutputStreamに書き込む前に

httpCon.setChunkedStreamingMode(0); 

を試してみてください。コンテンツの長さがあらかじめわかっていない場合は、常にhttp接続でこれを行う必要があります。

関連する問題