TCP字节流编程
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/d39c93493dfe454d80d0597a8291f9a9.png)
服务器端
package com.cyt.IOStream.socket;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 服务端
*/
public class SocketTcp01Server {
public static void main(String[] args) throws IOException {
//思路
//1.在本机的9999端口监听,等待连接
// 注意细节:要求在本机没有其他服务在监听9999
//这个ServerSocket 可以通过accept()返回多个Socket[多个客户端连接服务器的并发]
ServerSocket serverSocket = new ServerSocket(9999);
System.out.println("服务端在9999端口监听,等待连接...");
//2.当没有客户端连接9999端口时,程序会阻塞,等待连接
//如果有客户端连接,则会返回Socket对象,程序继续
Socket socket = serverSocket.accept();
System.out.println("服务端 socket = " + socket.getClass());
//3.通过socket.getInputStream()读取客户端写入到数据通道的数据,显示
InputStream inputStream = socket.getInputStream();
//4.IO读取
//4.1先设置个缓冲
byte[] buf = new byte[1024];
//4.2定义readLen长度
int readLen = 0;
while((readLen = inputStream.read(buf)) != -1){
//根据读取到的实际长度,显示内容
System.out.println(new String(buf,0,readLen));
}
//5.关闭流和socket
inputStream.close();
socket.close();
serverSocket.close();
}
}
客户端
package com.cyt.IOStream.socket;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* 客户端
*/
public class SocketTcp01Client {
public static void main(String[] args) throws IOException {
//思路
//1.连接本机服务器(ip,端口)
//解读:连接本机的9999端口,如果连接成功,返回Socket对象
Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
System.out.println("客户端 socket返回=" + socket.getClass());
//连接上后,生成Socket,通过socket.getOutputStream()
// 得到和socket对象关联的输出流对象
OutputStream outputStream = socket.getOutputStream();
//3.通过输出流,写入数据到数据通道
outputStream.write("hello,server".getBytes());
//4.关闭流对象和socket,必须关闭
outputStream.close();
socket.close();
System.out.println("客户端退出");
}
}