TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象
通信之前要保证连接已经建立
通过Socket产生IO流来进行网络通信
TCP通信程序
客户端:
①创建客户端的Socket对象(Socket)与指定服务端连接
Socket(String host,int port)
②获取输出流写数据
OutputStream getOutputStream()
③释放资源
void close()
服务器端:
①创建服务器端的Socket对象(ServerSocket)
ServerSocket(int port)
②监听客户端连接,返回一个Socket对象
Socket accept()
③获取输入流,读数据,并把数据显示在控制台
InputStream getInputSTream()
④释放资源
void close()
代码演示:
客户端发送数据:
package a09tcpdemo;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws IOException {
//TCP协议,发送数据
//1.创建Socket对象
//细节:在创建对象的同时会链接服务器,如果连接不上,代码会报错
Socket socket=new Socket("127.0.0.1",10001);
//2.可以从连接通道中获取输出流
OutputStream os=socket.getOutputStream();
//写出数据
os.write("鹿晗真帅".getBytes());//传中文会报错
//.释放资源
os.close();
socket.close();
}
}
服务器端接收数据
package a09tcpdemo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException {
//TCP协议接收数据
//1.创建对象ServerSocket
ServerSocket ss=new ServerSocket(10001);
//2.监听客户端的连接
Socket socket = ss.accept();
//3.从连接通道中获取输入流读取数据
/* InputStream is = socket.getInputStream();
InputStreamReader isr=new InputStreamReader(is);//将字节流转成字符流
BufferedReader br=new BufferedReader(isr);//提高效率
*/
BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
int b;
while((b=br.read())!=-1){
System.out.print((char)b);
}
//4.释放资源
socket.close();//断开与客户端连接
ss.close();//关闭服务器
}
}
运行结果:先运行服务器端,再运行客户端
TCP通信程序(三次握手)(图片来自哔站黑马程序员)
TCP通信程序(四次挥手)