Java使用TCP协议进行通信的基本流程
传输层协议:TCP,面向连接的协议,必须服务端和客户端两端都存在才可以进行数据传输。
先有服务器,再来客户端访问。
服务端:
1、ServerSocket创建服务器的端口。
2、Socket accpt() 阻塞式获取一个客户连接。
3、getInputStream,getOutputStream获取连接中的io流进行数据操作。
4、关闭资源
客户端:
1、new Socket(地址,端口) 创建一个套接字对象,连接上服务器
2、getInputStream,getOutputStream获取连接中的io流进行数据操作。
3、关闭资源
例子
(为图简洁,以下类或方法在同一个类中。)
服务端:
/** * 服务器 */ class Myserve{ static void test() throws IOException { //1.创建服务器端口 ServerSocket serverSocket = new ServerSocket(7777); //2.阻塞式等待客户连接,接受套接字对象 Socket client = serverSocket.accept(); //3.进行操作,例如获取流 BufferedReader brd = new BufferedReader(new InputStreamReader(client.getInputStream())); System.out.println("客户端接收到:"+brd.readLine()); //4.关闭资源 brd.close(); serverSocket.close(); } }
客户端:
/** * 客户端 */ class Myclient{ static void test() throws IOException { //1.创建套接字对象,指定目的地址和端口 Socket client = new Socket("localhost",7777);//2.操作 BufferedReader brd = new BufferedReader(new InputStreamReader(System.in)); System.out.print("在此输入要传输的数据:"); String datas = brd.readLine(); //把datas写入传输流 BufferedOutputStream bos = new BufferedOutputStream(client.getOutputStream()); bos.write(datas.getBytes()); //3.关闭资源 bos.close(); client.close(); } }
测试:
public static void main(String[] args) throws IOException { //开启一个服务器 new Thread(()-> { try { Myserve.test(); } catch (IOException e) { e.printStackTrace(); } }).start(); //开启一个客户端 Myclient.test(); }
运行结果: