【问题标题】:How to write on web server in java如何用Java在Web服务器上编写
【发布时间】:2011-01-30 17:01:26
【问题描述】:

您好,我在 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)

请告诉我怎么了

【问题讨论】:

  • 我认为对代码进行格式化会有所帮助,但如果你想这样做的话,我没有仔细检查和缩进你的源代码。
  • 您的小程序在哪里尝试向服务器发送数据?看起来客户端只是在等待服务器向它发送数据。
  • 我只有时间快速浏览一下,但我没有看到您在 write 调用后调用了 flush()。此外,您在写入“exit”后不会发送新行,因此服务器中的 readLine() 调用将被挂起等待。
  • 这个问题似乎高度相关:stackoverflow.com/questions/4844535/…

标签: java sockets webserver socketserver


【解决方案1】:

试试

httpCon.setChunkedStreamingMode(0);

在写入输出流之前。如果事先不知道内容长度,则应始终在 http 连接上执行此操作。

【讨论】:

    猜你喜欢
    • 2011-03-09
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 2013-10-16
    • 1970-01-01
    • 2016-06-30
    相关资源
    最近更新 更多