标题: 问个Tcp Socket的问题 [打印本页] 作者: 谭荣强 时间: 2014-4-1 09:23 标题: 问个Tcp Socket的问题 有运行结果但是报了个异常,以前没遇见过这种情况。不知道问什么 。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();
}
}作者: osully 时间: 2014-4-1 09:48
read !=-1吧
while((len=in.read(buf))!=0)
{
System.out.println(new String(buf,0,len));
}作者: ╰青青子佩ˊゝ 时间: 2014-4-1 09:58
太粗心了吧。 while((len=in.read(buf))!=0),0要改成-1。作者: 苏伯亚 时间: 2014-4-1 10:03
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)); //这里这样就可以