黑马程序员技术交流社区

标题: 如何获取客户端的信息 [打印本页]

作者: 洪灿阳    时间: 2012-12-20 14:25
标题: 如何获取客户端的信息
获取客户端的信息,比如端口,还有上传过来的文件的名称和大小还有文件格式?求指点!
作者: 王晨    时间: 2012-12-20 15:02
这也是我从网上看到的,希望对你有帮助,如果你有更好的方法,麻烦告诉我一下!谢谢!!
  1. String agent = request.getHeader("user-agent");
  2. System.out.println(agent);
  3. StringTokenizer st = new StringTokenizer(agent,";");
  4. st.nextToken();
  5. String userbrowser = st.nextToken();
  6. System.out.println(userbrowser);
  7. String useros = st.nextToken();
  8. System.out.println(useros);
  9. System.out.println(System.getProperty("os.name")); //win2003竟然是win xp?
  10. System.out.println(System.getProperty("os.version"));
  11. System.out.println(System.getProperty("os.arch"));
  12. System.out.println(request.getHeader("user-agent"));
  13. System.out.println(request.getHeader("user-agent")); //返回客户端浏览器的版本号、类型
  14. System.out.println(request.getMethod()); //:获得客户端向服务器端传送数据的方法有get、post、put等类型
  15. System.out.println(request.getRequestURI()); //:获得发出请求字符串的客户端地址
  16. System.out.println(request.getServletPath()); //:获得客户端所请求的脚本文件的文件路径
  17. System.out.println(request.getServerName()); //:获得服务器的名字
  18. System.out.println(request.getServerPort()); //:获得服务器的端口号
  19. System.out.println(request.getRemoteAddr()); //:获得客户端的ip地址
  20. System.out.println(request.getRemoteHost()); //:获得客户端电脑的名字,若失败,则返回客户端电脑的ip地址
  21. System.out.println(request.getProtocol()); //:
  22. System.out.println(request.getHeaderNames()); //:返回所有request header的名字,结果集是一个enumeration(枚举)类的实例
  23. System.out.println("Protocol: " + request.getProtocol());
  24. System.out.println("Scheme: " + request.getScheme());
  25. System.out.println("Server Name: " + request.getServerName() );
  26. System.out.println("Server Port: " + request.getServerPort());
  27. System.out.println("Protocol: " + request.getProtocol());
  28. System.out.println("Server Info: " + getServletConfig().getServletContext().getServerInfo());
  29. System.out.println("Remote Addr: " + request.getRemoteAddr());
  30. System.out.println("Remote Host: " + request.getRemoteHost());
  31. System.out.println("Character Encoding: " + request.getCharacterEncoding());
  32. System.out.println("Content Length: " + request.getContentLength());
  33. System.out.println("Content Type: "+ request.getContentType());
  34. System.out.println("Auth Type: " + request.getAuthType());
  35. System.out.println("HTTP Method: " + request.getMethod());
  36. System.out.println("Path Info: " + request.getPathInfo());
  37. System.out.println("Path Trans: " + request.getPathTranslated());
  38. System.out.println("Query String: " + request.getQueryString());
  39. System.out.println("Remote User: " + request.getRemoteUser());
  40. System.out.println("Session Id: " + request.getRequestedSessionId());
  41. System.out.println("Request URI: " + request.getRequestURI());
  42. System.out.println("Servlet Path: " + request.getServletPath());
  43. System.out.println("Accept: " + request.getHeader("Accept"));
  44. System.out.println("Host: " + request.getHeader("Host"));
  45. System.out.println("Referer : " + request.getHeader("Referer"));
  46. System.out.println("Accept-Language : " + request.getHeader("Accept-Language"));
  47. System.out.println("Accept-Encoding : " + request.getHeader("Accept-Encoding"));
  48. System.out.println("User-Agent : " + request.getHeader("User-Agent"));
  49. System.out.println("Connection : " + request.getHeader("Connection"));
  50. System.out.println("Cookie : " + request.getHeader("Cookie"));
复制代码

作者: 洪灿阳    时间: 2012-12-20 16:25
王晨 发表于 2012-12-20 15:02
这也是我从网上看到的,希望对你有帮助,如果你有更好的方法,麻烦告诉我一下!谢谢!! ...

谢谢。这个好像是jsp的调用方式啊,我是想要用直接通过jiava调用

作者: 王晨    时间: 2012-12-20 16:34
洪灿阳 发表于 2012-12-20 16:25
谢谢。这个好像是jsp的调用方式啊,我是想要用直接通过jiava调用

额,那我弄错了,我去看看我同学那有没有,有的话发给你
作者: 高会仁    时间: 2012-12-20 16:51
本帖最后由 高会仁 于 2012-12-20 16:56 编辑

可以这样:

在客户端这样只写部分代码:
FileInputStream fis = new FileInputStream(file);//
输入流
//定义一个200字节的区域来保存文件信息 这里200个字节可以根据需要定义,文件名占不了几个字节
byte[] b =
file.getName().getBytes();//这里根据需要,我只获取了file.getName()
byte[] info = Arrays.copyOf(b, 200);
ByteArrayInputStream bais = new ByteArrayInputStream(info);
//合并流
SequenceInputStream
sis = new SequenceInputStream(bais,fis);
OutputStream out = s.getOutputStream(); //
输出流,目的为服务器
byte[] buf = new byte[1024];


intlen = 0;

while((len=sis.read(buf))!=-1)
{
out.write(buf,0,len);
}
服务器取出文件名部分代码如下:
Socket s = ss.accept();
InputStream in = s.getInputStream();//
获取socket的输入流
byte[] info = new byte[200];//
定义一个200个字节的数组,因为客户端就是定义的一个200个字节的数组来存储文件信息的
in.read(info);//
所以这里读取到的就是客户端上传文件的名称
StringfileName = new String(info).trim();//获取文件名
//获取完文件名后,后面就是惯例了
FileOutputStream fos = new FileOutputStream(file);


byte[]buf = new byte[1024];

intlen = 0;
while((len=in.read(buf))!=-1)
{
fos.write(buf,0,len);
}



作者: 洪灿阳    时间: 2012-12-20 17:12
高会仁 发表于 2012-12-20 16:51
可以这样:

在客户端这样只写部分代码:

谢谢啦! 这个想法真的太赞了。。。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2