CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

j2se中如何在服务器和客户端发送消息

楼主lishuangying(小双)2005-06-03 15:48:03 在 Java / J2SE / 基础类 提问

我用J2SE写了一个访问服务器的小程序,服务器端用servlet响应,客户端发消息给服务器端,服务器在收到消息后,将消息传回客户端,问题是服务器端没有收到发的消息  
  客户端程序:  
  import   java.io.*;  
  import   java.net.*;  
  public   class   Transmit_2{  
  public   static   void   main(String[]   args)   {  
  URL   url=null;  
  String   xx=("http://localhost:8080/servlet/Receive");  
  OutputStream   out=null;  
  InputStream   in=null;  
  HttpURLConnection   go=null;  
  String   query="stone";  
  try{  
  System.out.println("Creating   URL");  
  url=new   URL(xx);  
  System.out.println("Opening   Stream");  
  go=(HttpURLConnection)url.openConnection();  
  go.setRequestMethod("POST");  
  go.setDoOutput(true);  
  out=go.getOutputStream();  
  DataOutputStream   buffer1=new   DataOutputStream(out);  
  if(go.getResponseCode()==200){  
  System.out.println("OK");  
  }  
  System.out.println("Transmiting   data");  
  buffer1.writeChars(query);  
  buffer1.close();  
  buffer1=null;  
  byte[]b=new   byte[13];  
  in=go.getInputStream();  
  DataInputStream   buffer2=new   DataInputStream(in);  
  buffer2.readFully(b);  
  buffer2.close();  
  String   lik=new   String(b);  
  System.out.println(lik);  
  }  
  catch(MalformedURLException   e){  
  System.out.println("Bad   URL");  
  }  
  catch(IOException   e){  
  System.out.println("IO   Error"+e.getMessage());  
  }  
  }  
  }    
  服务器端程序:  
  import   java.io.*;  
  import   java.net.*;  
  import   javax.servlet.*;  
  import   javax.servlet.http.*;  
  public   class   Receive   extends   HttpServlet   {  
   
  public   void   doPost(HttpServletRequest   req,   HttpServletResponse   res)  
  throws   ServletException,   IOException   {  
  InputStreamReader   buffered=new   InputStreamReader(req.getInputStream());  
  System.out.println("******"+buffered+"********");  
  BufferedReader   nn=new   BufferedReader(buffered);  
  System.out.println("******"+nn+"******");  
  String   lisy=nn.readLine();  
  System.out.println("******"+nn.readLine()+"********");  
  res.setContentType("text/html");  
  PrintWriter   out=res.getWriter();  
  if   (lisy!=null)  
  {  
  if(lisy.equals("stone")){  
  out.println(lisy+"good");  
  }  
  else  
  {  
  out.println(lisy+"Fail");  
  }  
  }  
  else  
  {  
  out.println("Nothing,NULL");  
  }  
  out.close();  
  }  
  public   void   destroy()   {  
   
  }  
  }  
  每次访问服务器返回的结果都是  
  Creating   URL  
  Opening   Stream  
  OK  
  Transmiting   data  
  Nothing,NULL  
   
  在服务器端得到输出  
  ******java.io.InputStreamReader@15bdc50********  
  ******java.io.BufferedReader@1dd3812******  
  ******null********  
   
  我在服务器端监听端口8080得到的是  
  报头content.length=0  
  说明根本就没有把信息发过去  
  我实在不知道该怎样传送消息,请各位高手帮帮忙,小弟不甚感激!  
  问题点数:50、回复次数:5Top

1 楼newste(旭林)回复于 2005-06-03 16:46:49 得分 5

用jms可以实现你要的结果  
  Top

2 楼harbor1981(我向你飞,泪温柔地坠!)回复于 2005-06-03 16:52:55 得分 5

upTop

3 楼ll42002(灰舌)回复于 2005-06-03 17:10:28 得分 5

既然你使用http协议,你就应该生成http包头才可以。Top

4 楼eureka0891(迷茫中...)回复于 2005-06-03 17:45:00 得分 35

你得按http来post数据,  
  可以用URLConnection:  
  try   {  
                  //   Construct   data  
                  String   data   =   URLEncoder.encode("key1",   "UTF-8")   +   "="   +   URLEncoder.encode("value1",   "UTF-8");  
                  data   +=   "&"   +   URLEncoder.encode("key2",   "UTF-8")   +   "="   +   URLEncoder.encode("value2",   "UTF-8");  
           
                  //   Send   data  
                  URL   url   =   new   URL("http://hostname:80/cgi");  
                  URLConnection   conn   =   url.openConnection();  
                  conn.setDoOutput(true);  
                  OutputStreamWriter   wr   =   new   OutputStreamWriter(conn.getOutputStream());  
                  wr.write(data);  
                  wr.flush();  
           
                  //   Get   the   response  
                  BufferedReader   rd   =   new   BufferedReader(new   InputStreamReader(conn.getInputStream()));  
                  String   line;  
                  while   ((line   =   rd.readLine())   !=   null)   {  
                          //   Process   line...  
                  }  
                  wr.close();  
                  rd.close();  
          }   catch   (Exception   e)   {  
          }  
   
  当然也可以用socket这样的话得写头等:  
  try   {  
                  //   Construct   data  
                  String   data   =   URLEncoder.encode("key1",   "UTF-8")   +   "="   +   URLEncoder.encode("value1",   "UTF-8");  
                  data   +=   "&"   +   URLEncoder.encode("key2",   "UTF-8")   +   "="   +   URLEncoder.encode("value2",   "UTF-8");  
           
                  //   Create   a   socket   to   the   host  
                  String   hostname   =   "hostname.com";  
                  int   port   =   80;  
                  InetAddress   addr   =   InetAddress.getByName(hostname);  
                  Socket   socket   =   new   Socket(addr,   port);  
           
                  //   Send   header  
                  String   path   =   "/servlet/SomeServlet";  
                  BufferedWriter   wr   =   new   BufferedWriter(new   OutputStreamWriter(socket.getOutputStream(),   "UTF8"));  
                  wr.write("POST   "+path+"   HTTP/1.0\r\n");  
                  wr.write("Content-Length:   "+data.length()+"\r\n");  
                  wr.write("Content-Type:   application/x-www-form-urlencoded\r\n");  
                  wr.write("\r\n");  
           
                  //   Send   data  
                  wr.write(data);  
                  wr.flush();  
           
                  //   Get   response  
                  BufferedReader   rd   =   new   BufferedReader(new   InputStreamReader(socket.getInputStream()));  
                  String   line;  
                  while   ((line   =   rd.readLine())   !=   null)   {  
                          //   Process   line...  
                  }  
                  wr.close();  
                  rd.close();  
          }   catch   (Exception   e)   {  
          }  
   
  Top

5 楼lishuangying(小双)回复于 2005-06-06 15:30:34 得分 0

多谢各位大哥了,还想问一下eureka0891(迷茫中...)   ,可以用HttpURLConnection来建立连接吗?Top

相关问题

  • 服务器和客户机
  • 服务器通知客户
  • 如何在服务器捕获客户与服务器断开?
  • 服务器/客户端怎么弄?
  • 客户端无法找到服务器
  • 客户端连接oracle服务器!!
  • 客户端不能连接服务器
  • 客户和服务器联接问题?
  • 客户和服务器联接问题?
  • 服务器-客户端程序.

关键词

  • .net
  • j2se
  • 服务器
  • 客户
  • 消息
  • null
  • urlencoder
  • 客户端
  • encode
  • wr

得分解答快速导航

  • 帖主:lishuangying
  • newste
  • harbor1981
  • ll42002
  • eureka0891

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo