把整过过程看作居民(客户端)将生活污水(数据)传给水厂(服务器端)处理,并将处理好的水传回给居民
客户端
package com.itheima.demo01.TCP;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
/**
* @author 叶志豪2020
* @date 2020/5/31 10:16
*/
public class TCPClient {
public static void main(String[] args) throws IOException {
//建立Socket (String IP,int port) 套接字 套接OutputStream对象 write 发送给服务器消息
Socket socket=new Socket("127.0.0.1",8888); //指向IP为127.0.0.1的8888端口(相当于建造一条水管指向水厂的地址和管口号)
OutputStream os=socket.getOutputStream();// geOutputStream 获取网络字节输出流对象(水管(socket)套在待处理污水(os)上)
os.write("你好服务器".getBytes());//向服务器发送消息
//socket套接InputStream对象 read读取消息 close释放资源
//接受服务器返回信息(水厂送回处理好的污水)
InputStream is=socket.getInputStream();//getInputStream获取InputStream对象(拿管子接收水厂传回来的水)
byte[]bytes=new byte[1024];
int len=is.read(bytes);
System.out.println(new String(bytes,0,len));
//释放资源(关闭设备)
socket.close();
}
}
服务器端
package com.itheima.demo01.TCP;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @author 叶志豪2020
* @date 2020/5/31 10:16
*/
public class TCPServer {
public static void main(String[] args) throws IOException {
//接受阶段:建立ServerSocket对象 通过accept方法获取Socket对象 getInputStream获取InputStream网络字节输入流对象 read读取接收到的客户端的数据
ServerSocket server=new ServerSocket(8888);//对象化服务器套接字,指定端口(不指定则随机分配)(相当于水厂专用管道,打开指定管道口)
Socket socket=server.accept();// accept获取套接字(相当于将水厂专用管道套在普通管道上
InputStream is=socket.getInputStream();//getInputStream获取InputStream网络字节输出流对象(普通管道接收污水
byte[]bytes=new byte[1024];
int len=is.read(bytes);//read读取数据(处理污水)
System.out.println(new String(bytes,0,len));//打印数据
//发送阶段:getOutputStream获取OutputStream网络字节输出流对象 write写消息传回客户端 close释放资源
OutputStream os=socket.getOutputStream();//getOutputStream获取OutputStream网络字节输出流对象(相当于在输出水流外面套上水管
os.write("收到消息谢谢".getBytes()); //write写消息传回客户端(水泵加压)
socket.close();
server.close();//释放资源(关闭设备
//运行阶段:先启动服务器端,再启动客户端
}
}