A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘元霄 黑马帝   /  2012-3-24 02:05  /  2114 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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--连接成功
哥们来啦!
如果客户端点的快的话就没有问题

   这是为什么  求解!!!!!

5 个回复

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

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


回复 使用道具 举报
你写的这个不管什么Exception都是throw掉了,可能只有自行关闭了,有很多地方的问题是很难发现的,还是一步一一步的完善比较好。
回复 使用道具 举报
把  sk.close();
                ss.close();

去掉
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马