这里是tcp客户端的代码
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class Socket_client {
public static void main(String[] args) throws UnknownHostException, IOException {
//first,创建一个socket对象
Socket s = new Socket("192.168.1.107",20000);
//second,获取Socket中的输出流
OutputStream out = s.getOutputStream();
//third,发送信息
out.write("嘿嘿嘿".getBytes());
//添加读取服务器返回信息功能
//使用socket流读取服务器返回数据
InputStream in = s.getInputStream();
byte[] b = new byte[1024];
int len = in.read(b);
String str = new String(b,0,len);
System.out.println(str);
//关闭资源
s.close();
}
}
这里是tcp服务端的代码
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server_Socket {
public static void main(String[] agrs) throws IOException{
//先建立一个服务Socket
ServerSocket ss = new ServerSocket(20000);
//获取客户Socket对象
Socket s = ss.accept();
//使用客户的Socket对象将信息打印出来
InputStream in = s.getInputStream();
byte[] b = new byte[1024];
int len;
while((len = in.read(b))!=-1){ //问题就出在这里,用循环读取,读取-1时,出现阻塞,后面代码无法运行
String str = new String(b,0,len);
System.out.println(str);
}
//使用客户的Socket对象将成功接受信息的信息反馈给客户端
OutputStream out = s.getOutputStream();
out.write("成功接受到信息".getBytes());
//关闭资源
s.close();
ss.close();
}
}
先执行了服务端,然后再执行客户端,服务端收到客户端发来的string后阻塞了,客户端也阻塞了,无法接受服务端回复的string
如果我把服务端循坏代码改成如下:
//使用客户的Socket对象将信息打印出来
InputStream in = s.getInputStream();
byte[] b = new byte[1024];
int len = in.read(b);
String str = new String(b,0,len);
System.out.println(str);
--------------------------------------------------
程序能正常运行,为何,求解?