首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

SOCKET发送HTTP请求,Servlet处理的有关问题

2012-09-29 
SOCKET发送HTTP请求,Servlet处理的问题客户端用socket连接web服务器发送HTTP请求,访问一个Servlet/service

SOCKET发送HTTP请求,Servlet处理的问题
客户端用socket连接web服务器发送HTTP请求,访问一个Servlet /service .并接收servlet的相应数据
我的客户端可以连接上服务端,但是发送的消息Servlet接收不到,Servlet发送回的消息客户端也接收不到。
客户端:

Java code
 
public class Client { 
    public static void main(String[] arg) { 
        Socket socket; 
        try { 
            socket = new Socket("10.20.64.203", 7001); 
            OutputStream os = socket.getOutputStream(); 
            InputStream ins = socket.getInputStream(); 
            String data= getXmlString(); 
            StringBuffer sb = new StringBuffer(); 
            sb.append("POST /service HTTP/1.1\r\n");// 注意\r\n为回车换行 
              sb.append("Accept-Language: zh-cn\r\n"); 
            sb.append("Connection: Keep-Alive\r\n"); 
            sb.append("Host:localhost\r\n"); 
            sb.append("Content-Length:11\r\n"); 
            sb.append("\r\n"); 
            sb.append("data=abc\r\n"); 
            sb.append("\r\n"); 
 
 
            // 接收Web服务器返回HTTP响应包 
              os.write(sb.toString().getBytes()); 
            os.flush(); 
            byte[] b = new byte[1000]; 
            ins.read(b); //读取http头 
              InputStreamReader ireader = new InputStreamReader(ins); 
            java.io.BufferedReader reader = new java.io.BufferedReader(ireader); 
            String  s = null;//读取内容
    System.out.println( "response:");
    while(( s= reader.readLine())!= null){//读取不到内容?
System.out.println(s);
    }             
        } catch (UnknownHostException e) { 
            e.printStackTrace(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
    } 

Servlet
Java code
public class ProcessServlet extends HttpServlet {    private static final long serialVersionUID = 1L;              public ProcessServlet() {        super();           }        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        System.out.println("receive Request message*******************:");        PrintWriter out = response.getWriter();        response.setContentType("text/html;charset=utf-8");        out.println("<html>");        out.println("<head><title>First servlet</title></head>");        out.println("<body>");        out.println("welcome use selevet");        out.println("</body>");        out.println("</html>");        BufferedReader reader = request.getReader();        String msg = null;        while ((msg = reader.readLine()) != null) {            System.out.println("receive Request message:" + msg);                        String send = "HTTP/1.1 200 OK\r\n" + "Filename: " + "\r\n"                    + "Content_length: " + "\r\n";            out.println(send);            out.flush();        }        out.flush();        out.close();            }        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        doGet(request,response);    }} 



[解决办法]
socket发送时,不需要指定通信地址么
比如http://192.168.2.213/项目名/servlet名
[解决办法]
Socket socket;
try { 
String data = URLEncoder.encode("k", "UTF-8") + "=" +
URLEncoder.encode("abc", "UTF-8");
InetAddress addr = InetAddress.getByName("10.20.64.203");
socket = new Socket(addr,7001);
BufferedWriter wr = new BufferedWriter(new 
OutputStreamWriter(socket.getOutputStream(), "UTF8")); 
InputStream ins = socket.getInputStream();
StringBuffer sb = new StringBuffer();
sb.append("POST /service HTTP/1.1\r\n");// 注意\r\n为回车换行
sb.append("Accept-Language: zh-cn\r\n");
sb.append("Connection: Keep-Alive\r\n");
sb.append("Host:localhost\r\n");
sb.append("Content-Length:11\r\n");
sb.append("Content-Type: application/x-www-form-urlencoded\r\n");
sb.append("\r\n");
sb.append(data);
// 接收Web服务器返回HTTP响应包
wr.write(sb.toString());
wr.flush();
BufferedReader rd = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
System.out.println(line);
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

[解决办法]
玩玩的话,你可以这么做,如果是正式项目的话,用 HTTP 客户端 API 吧,强烈不建议自己用 Socket 实现!
[解决办法]
探讨
玩玩的话,你可以这么做,如果是正式项目的话,用 HTTP 客户端 API 吧,强烈不建议自己用 Socket 实现!

[解决办法]
是不是 需要用 URLConnection对象啊
[解决办法]
Content-Length:11设置的有问题,应该是参数的长度
[解决办法]
现在没有客户端是不支持 HTTP 的 API,而要用 Socket 来实现的!

热点排行