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

© 谭荣强 高级黑马   /  2014-4-1 09:23  /  1382 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有运行结果但是报了个异常,以前没遇见过这种情况。不知道问什么 。Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String ind
ex out of range: -1

import java.io.*;
import java.net.*;
class Client
{
        public static void main(String[] args)throws Exception
        {
        //建立客户端Socket服务,指定目的主机和端口。
        Socket s = new Socket("192.168.0.145",998);
        //为了发送数据,应该获取Socket流中的输出流。
        OutputStream os = s.getOutputStream();

        os.write("tcp来了".getBytes());
        //关闭客户端
        s.close();
        }
}
class Server
{
        public static void main(String[] args)throws Exception
        {
                //建立服务端ServerSocket
                ServerSocket ss = new ServerSocket(998);
                //获取客户端对象
                Socket s = ss.accept();
                //为了获取数据,获取Socket流中输入流,源是网络流
                InputStream in = s.getInputStream();
                byte[] buf = new byte[1024];
                //获取客户端ip地址,看是否连接成功。
                String ip = s.getInetAddress().getHostAddress();
                int len = 0;
                while((len=in.read(buf))!=0)
                {
                        System.out.println(new String(buf,0,len));
                }
                s.close();//服务端可能不关自己,但是要关闭客户端,
                 ss.close();
        }
       
}

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

7 个回复

倒序浏览
read !=-1吧

while((len=in.read(buf))!=0)
{
  System.out.println(new String(buf,0,len));
}
回复 使用道具 举报
太粗心了吧。 while((len=in.read(buf))!=0),0要改成-1。
回复 使用道具 举报
                int len = 0;
                while((len=in.read(buf))!=0)
                {
                        System.out.println(new String(buf,0,len));
                }
就是这里的错误,这里需要循环语句吗?只是打印出客户机发送的内容,是全部打印不是一个字节一个字节的打印,是字节流。
不需要循环输出啊,想要服务器一直运行,可以多连几个客户也不是在这里添加循环。
给你该了一下你看看
class Server
{
        public static void main(String[] args)throws Exception
        {
                //建立服务端ServerSocket
                ServerSocket ss = new ServerSocket(998);

                while(true)//这里添加一个循环就可以然服务器一直运行。
          {
                Socket s = ss.accept();

                InputStream in = s.getInputStream();
                byte[] buf = new byte[1024];

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

                int len =in.read(buf);            
                System.out.println(new String(buf,0,len));     //这里这样就可以

                s.close();//服务端可能不关自己,但是要关闭客户端,\
        }

}}

希望你帮到你

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
   while((len=in.read(buf))!=0)----------------------------------------------------(len=in.read(buf))!=-1
                {
                        System.out.println(new String(buf,0,len));
                }
                s.close();//服务端可能不关自己,但是要关闭客户端,
                 ss.close();
回复 使用道具 举报
粗心的孩子,敲代码的时候多细心一点就会减少出错的机会了
回复 使用道具 举报
0了 ,我说呢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马