一、TCP通信原理

TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象,从而在通信的两端形成网络虚拟链路,

一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信

Java对于基于TCP协议的网络提供了良好的封装,使用Socket对象代表两端的通信端口,并通过Socket产生IO流进行网络通信

Java为客户端提供了Socket类,为服务端提供了ServerSocket类

二、TCP发送数据

发送数据的步骤:

1.创建客户端的Socket对象

Socket(String host, int port): 创建流套接字并将其连接到指定主机上的指定端口号,IP地址可以是字符串类型的。

2.获取输出流、写数据outputstream

getOutputStream():返回此套接字的输出流。

3.释放资源

package Demo042002;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
/*TCP发送端
1.创建客户端的Socket对象
Socket(String host,  int port): 创建流套接字并将其连接到指定主机上的指定端口号,IP地址可以是字符串类型的。
2.获取输出流、写数据outputstream
getOutputStream():返回此套接字的输出流。
* */
public class TcpSend {
    public static void main(String[] args) throws IOException {
        //创建客户端的Socket对象
        //Socket(String host,  int port): 创建流套接字并将其连接到指定主机上的指定端口号,IP地址可以是字符串类型的。
        Socket s=new Socket("cy",12345);
        //获取输出流、写数据outputstream
        OutputStream ops = s.getOutputStream();
        ops.write("最美不过姑娘你".getBytes());
        //释放资源
        ops.close();
         s.close();
    }
}

这仅仅是发送数据的步骤,我们知道TCP通信需要经过“三次握手”,所以如果直接运行会报错

三、TCP接收数据

步骤:

1.创建服务器端的Sockt对象(ServerSocket)

2.监听客户端连接,返回一个Soket对象

accept() 侦听要连接到此套接字并接受它返回一个Soket对象。

3.获取输入流,读数据;

getInputstream()

4.释放资源

package Demo042002;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
/*服务端
1.创建服务器端的Sockt对象(ServerSocket)
2.获取输入流,读数据;
getInputStream():返回此套接字的输入流。
3.释放资源
* */
public class TcpRecive {
    public static void main(String[] args) throws IOException {
        //创建服务器端的Sockt对象(ServerSocket)
        ServerSocket ss=new ServerSocket(12345);
        //accept() 侦听要连接到此套接字并接受它返回一个Soket对象
        Socket s = ss.accept();
        //获取输入流,读数据;
        InputStream ips = s.getInputStream();
        byte[] bytes=new byte[1024];
        int len;
        while ((len=ips.read(bytes))!=-1){
            System.out.println("数据是"+new String(bytes,0,len));

        }
        //释放资源
        ips.close();
        ss.close();
    }
}

在建立服务端并启动后,客户端就可以通过三次握手进行与服务端的通信