2

嗨,我在 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(){}
}

现在,当我运行服务器时,服务器仅显示以下内容

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 回答