有一个测试程序启动的时候会往某服务器发送验证数据包,协议是HTTP,80端口。
我想把这个服务器的IP地址写到本机的host文件里,然后用自己的java写的服务器分析数据包的内容。java程序的服务器部分代码: try { // start socket
ServerSocket serverSocket = new ServerSocket(80);
} catch (IOException ex) {
System.out.println("Server" + ex.getMessage());
}
System.out.println("Server is starting " + serverSocket);
Socket socket = null;
while(1)
{
socket = serverSocket.accept();
}但是java服务器一直得不到测试程序的连接信息...请问是不是方法调用错了。HTTP不能用serverSocket?该用什么方法拦截呢?

解决方案 »

  1.   

    serverSocket用的协议和HTTP不是一个层次,它一般用的是第四层传输层比如tcp和udp。
    而http是顶层应用层。
    所以http和serverSocket没什么直接关系。
    从你的代码完全看不出想干什么。没有处理业务的任何代码。
    另外客户端的请求代码也没有,没发帮你分析。
      

  2.   

    accept函数的那一句放在死循环里面?不就出不来了么
      

  3.   


    我的代码是想开启一个socket监听端口,然后监听测试程序的HTTP请求。仅仅是想获取HTTP请求,以及HTTP请求里面的数据。客户端的是一个未知的测试程序,我没有源码。只知道它采用HTTP协议往服务器发送请求,服务器的地址也知道。 我想建立一个自己的服务器,然后在本机的host里面把测试程序的服务器地址指向本机。方便自己拦截/分析客户端的请求内容
      

  4.   

    socket可以接收http协议的请求,因为socket的通讯协议层次高于http。
    楼主你还是没明白我一楼的解释。
    建议你好好补补soceket通讯的基础再来解决这个问题吧,自己花点心思补补基础。
    不要胡乱猜测,浪费时间。
      

  5.   

    要拦截网络端口数据包的话,用 Socket 可不行,得在网卡上做文章,Java API 根本做不到。Java 有个开源框架 jpcap 可以做这种事情,其需要调用 native 代码。如果只是想看看的话,有很多工具,比如:wireshark, smartsniff, tcpdump/windump 等等
      

  6.   

    经过本人长达三个月的思考,做出以下结论:1.你想栏你电脑向外发的数据,所以其实你的电脑是个客户端。是客户端就不能用serverSocket
    2.我们假设你的电脑是当做HTTP服务器,那么80端口被服务器占用了,你的java程序就不能绑定到80端口上。

    10.总之。我觉得java就不是写这种程序的料
      

  7.   

    1 HOST文件配置的是为了能直接跳过dns解析吧,应该配置ip和域名的对应,你直接配置ip对应不会起作用.
    2 那个软件是否支持代理,如果支持的话设置代理地址为本地,端口为80,使用上面代码就可以,不过缺少内容的输出部分
    3 可以试试fiddler2.微软出的一个工具,很小