黑马程序员技术交流社区

标题: 网络编程客服端服务端问题?求解! [打印本页]

作者: 刘元霄    时间: 2012-3-24 02:05
标题: 网络编程客服端服务端问题?求解!
class Tcpkfd
{
        public static void main(String[] args) throws Exception
        {
        //创建客户端,指定目的主机和端口。
                Socket sk = new Socket("192.168.0.3",8888);

        //为了发送数据,应该用socket流中的输出流。
                OutputStream out = sk.getOutputStream();

                out.write("哥们来啦!".getBytes());

                sk.close();
        }
}

//创建一个服务端
class Tcpfwd
{
        public static void main(String[] args) throws Exception
        {
        //建立服务端,并监听一个端口。
                ServerSocket ss = new ServerSocket(8888);

        //通过accept方法获取连接过来的客服端对象。
                Socket sk = ss.accept();

                String ip = sk.getInetAddress().getHostAddress();

                System.out.println(ip+"--连接成功");
       
        //获取客户端发送过来的数据,那么要使用客户端对象的读取流来读取数据。
                InputStream in = sk.getInputStream();

                byte[] but = new byte[1024];

                int len = in.read(but);

                String data = new String(but,0,len);

                System.out.println(data);
               
                sk.close();
                ss.close();


        }
}


编译时通过的, 运行也没有问题, 就是服务端运行后 一会时间就自动关闭。

D:\JAVAX\day13>java Tcpfwd
127.0.0.1--连接成功
有时候我客服端还没开启 它就这样了!


192.168.0.3--连接成功
哥们来啦!
如果客户端点的快的话就没有问题

   这是为什么  求解!!!!!
作者: 刘元霄    时间: 2012-3-24 02:06
客户端运行的快的话他就会没有问题  可是不能等有时候服务端刚刚运行 就127.0.0.1--连接成功
  表示很纠结!!
作者: 亚男    时间: 2012-3-24 03:09
我觉得应该把到数最后一句话去掉,,因为你ss.close()后,整个服务端的对象就没了,对象都没了,程序怎么可能不结束呢?建议你取消后在试,我也很想知道结果,有答案别忘回贴!
作者: 刘元霄    时间: 2012-3-24 05:23
亚男 发表于 2012-3-24 03:09
我觉得应该把到数最后一句话去掉,,因为你ss.close()后,整个服务端的对象就没了,对象都没了,程序怎么可能不 ...

int len = in.read(but);
  这个地方应该阻塞 等待客户端数据的。
现在整个程序都不行了 客户端 强行中断异常了  
服务端还是这样了
127.0.0.1--连接成功



作者: 李见黎    时间: 2012-3-24 09:51
你写的这个不管什么Exception都是throw掉了,可能只有自行关闭了,有很多地方的问题是很难发现的,还是一步一一步的完善比较好。
作者: 唐朋    时间: 2012-3-24 11:47
把  sk.close();
                ss.close();

去掉




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