注意细节:
1、accept()方法是阻塞的,它的作用是等待客户端连接,如果连接成功会返回一个socket对象
2、客户端创建对象并连接服务器,此时是通过三次握手协议保证跟服务器之间的连接
3、对于客户端,它是往外写数据,所以是输出流
4、read()方法也是阻塞的
5、在关流的时候,会有一个往服务器写结束标记的动作,read()方法通过这个结束标记完成执行
6、最后一步断开连接时,通过4次挥手协议保证连接终止
public class SocketDemo { public static void main(String[] args) throws IOException { // 创建一个客户端 Socket socket = new Socket("127.0.0.1", 10000); // 获得一个输出字节流 OutputStream outputStream = socket.getOutputStream(); // 写数据 outputStream.write("嗨,我是客户端。。。".getBytes()); // 释放资源 socket.close(); outputStream.close(); } }
public class ServerSocketDemo { public static void main(String[] args) throws IOException { // 1、创建一个接收端 ServerSocket serverSocket = new ServerSocket(10000); // 2、等待客户端连接,如果没有客户端连接,它会一直死等,进入阻塞状态。 System.out.println("等待客户端连接。。。。。。。。。。。。。。。"); Socket socket = serverSocket.accept(); System.out.println("客户端连接成功!"); // 3、获得一个输入流 InputStream inputStream = socket.getInputStream(); // 4、接收数据 int len; byte[] bytes = new byte[1024]; while ((len = inputStream.read(bytes)) != -1) { System.out.println(new String(bytes, 0, bytes.length)); } // 5、释放资源 inputStream.close(); serverSocket.close(); } }