socket通讯是基于tcp/ip协议的连接,该协议是基于ip和端口的,socket服务端跑起来之后会一直监控发送到某个端口上的数据,但是,socket所传输的内容不像文件一样,文件内容结尾是有标志符的,而socket传输的内容没有结尾标志符,所以socket传输内容如果不关闭流,read方法和readline方法在读取完数据后,会处于阻塞状态,一直等待数据传输过来,因为流没有关闭,会话还在进行。
像下面的代码:
客户端
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
/*
* 客户端
*/
public class Client {
public static void main(String[] args) {
// 1、创建客户端Socket,指定服务器地址和端口
try {
Socket socket = new Socket("localhost", 8888);
// 2、获取输出流,向服务器端发送信息
OutputStream os = socket.getOutputStream();// 获取字节输出流
// 将输出流包装为打印流
PrintWriter pw = new PrintWriter(os);
pw.write("admin 123");
pw.flush();
// 3、获取输入流,并读取服务器端的响应信息
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String info = null;
while((info = br.readLine())!=null){
System.out.println("我是客户端,服务器跟我说:"+new String(info.getBytes(), "UTF-8"));
}
// 4、关闭资源
br.close();
is.close();
pw.close();