黑马程序员技术交流社区

标题: TCP自定义服务端问题 [打印本页]

作者: 天下    时间: 2013-9-20 11:58
标题: TCP自定义服务端问题
本帖最后由 天下 于 2013-9-23 19:18 编辑

在练习一小练习时,1,自定义一个服务端,并开启。

2,用浏览器当做客户端,输入ip和端口号访问
问题:1结果是浏览器根本访问不到数据,第二次,我开启网络,浏览器还是没有读到数据????
           2,我就奇了怪,为什么我每连接一次网络,显示的ip都不一样
  1. /*自定义tcp服务端*/
  2. import java.net.*;
  3. import java.io.*;
  4. class TcpServerSocket
  5. {
  6.           public static void main(String[] args)throws Exception
  7.           {
  8.                 ServerSocket ss=new ServerSocket(10010);
  9.                      Socket s=ss.accept();
  10.                
  11.                 System.out.println(s.getInetAddress().getHostAddress());
  12.                 PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
  13.                
  14.               pw.println("客户端,你好");
  15.                
  16.               s.close();
  17.               ss.close();
  18.           }
  19. }
复制代码
伤脑筋????????

作者: aspoMAN    时间: 2013-9-20 12:22
你用浏览器怎么访问的呢?
相当于是访问本机的服务器,应该不会出现多个IP的情况啊
作者: yxz    时间: 2013-9-20 14:28
LZ用的什么浏览器,我也遇到过这个问题,大概原因可能是浏览的的请求数据必须要被read以后才能接收到返回数据,我用的chrome,其实你的代码和老师的代码唯一区别就是没有写inputstream流并且读入数据,可以试试我的办法就是。写一个inputstream流,并且read一下浏览器的请求数据,其他代码不用变。
作者: 天下    时间: 2013-9-20 15:10
yxz 发表于 2013-9-20 14:28
LZ用的什么浏览器,我也遇到过这个问题,大概原因可能是浏览的的请求数据必须要被read以后才能接收到返回数 ...

没有用,IE浏览器。就是解决不了

作者: yxz    时间: 2013-9-20 17:53
再次测试了一下。IE访问没问题。检查一下你的代码有什么不同



作者: 天下    时间: 2013-9-20 19:48
本帖最后由 天下 于 2013-9-20 19:50 编辑
yxz 发表于 2013-9-20 17:53
再次测试了一下。IE访问没问题。检查一下你的代码有什么不同

哥们,我是要崩溃了,怎么到我这里就是不行呢?
1,第一种方式,我是把网络断开,开起服务端,再用360IE浏览器输入ip和端口,就是访问不到?

2,第二种方式:我将网络连接好,再开启服务端,再用360IE浏览器输入ip和端口号,在服务端显示已连接客户端(因为我加了System.out.println(s.getInetAddress().getHostAddress());)服务端就运行结束,可是看浏览器还是没有读到数据


这2中方式,结果在浏览器上都是:::网页无法访问

哥们如果不吝赐教的话。加我QQ2524998616,天下

代码语句我检查了,一模一样,没有问题

作者: yting_xmei1129    时间: 2013-9-20 20:21
楼主试下我帮你改的代码
把那个//ss.close();注释掉、、、

/*自定义tcp服务端*/
import java.net.*;
import java.io.*;

class TcpServerSocket {
        public static void main(String[] args) throws Exception {
                ServerSocket ss = new ServerSocket(12212);
               
                while(true){
                        Socket s = ss.accept();
       
                        System.out.println(s.getInetAddress().getHostAddress());
                        PrintWriter pw = new PrintWriter(s.getOutputStream());
                       
                        pw.write("hello client !!!");
                       
                        pw.close();
                        s.close();
                        //ss.close();
                }
        }
}
作者: yting_xmei1129    时间: 2013-9-20 20:24
记得注释//ss.close(); 跟 while(true){}
作者: 天下    时间: 2013-9-22 09:01
yting_xmei1129 发表于 2013-9-20 20:24
记得注释//ss.close(); 跟 while(true){}

哥们 ,谢了,搞定了。但是我有点小疑惑,System.out.println(s.getInetAddress().getHostAddress());这句为什么运行了4次或5次,在控制台显示,浏览器才访问到数据,


作者: yting_xmei1129    时间: 2013-9-22 09:10
第一,运行程序之前最好是把浏览器的缓存给删除掉
第二,你说的运行了4次或5次,在控制台显示,浏览器才访问到数据,我试了一下,打开 httpwatch监测了http一下,这个应该是你按F5,也就是刷新刷的太快的原因,饿刚刚也试了下,就是刷新太快了,数据还没完全传送过来,又被刷掉了、、、




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