TCP协议(Transmission Control Protocol),即传输控制协议,是一种面向连接
的,可靠
的,基于字节流
的传输层通信协议。数据大小无限制。
建立连接的过程需要三次握手
。
断开连接的过程需要四次挥手
。
使用TCP协议的通信双方分别为客户端
和服务器端
。
客户端负责向服务器端发送数据,服务器端负责接收客户端的数据并给出反馈。两者地位不相同。
使用TCP协议的通信双方,建立通信连接需要三次握手
,即三个步骤:
使用TCP协议的通信双方,断开已经建立的连接需要四次挥手
,即四个步骤:
Socket(套接字)是由操作系统提供的统一网络编程接口
,是网络中的一个通信节点。
因为基于TCP协议,在使用Socket进行网络编程时需要分别进行服务器端的开发和客户端的开发。
ServerSocket listener = new ServerSocket(10086);//指定服务器端的端口号
Socket clientSocket = listener.accept();
//注意:accept()是一个阻塞方法,在获得客户端的套接字之前不会执行后面的代码。
//用于接收客户端的数据
InputStream is = clientSocket.getInputStream();
//用于向客户端输出数据
OutputStream os = clientSocket.getOutputStream();
//使用转换流将字节流转成字符流,并规定读取和输出的编码格式为UTF-8
InputStreamReader isr = new InputStreamReader(is,"UTF-8");
OutputStreamWriter osw = new OutputStreamWriter(os,"UTF-8");
//将字符流转换成字符缓冲流,效率更高
BufferedReader br = new BufferedReaer(isr);
BufferedWriter bw = new BufferedWriter(osw);
String data = br.readLine();//读取一行数据
System.out.println("客户端说:" + data);
String s = "已接收到数据";
bw.write(s);//向客户端发送反馈
bw.newLine();//换行
bw.flush();//刷新缓存
listener.close();
clientSocket.close();
is.close();
os.close();
isr.close();
osw.close();
br.close();
bw.close();
//指定服务器端的地址和端口号
Socket ClientSocket = new Socket("10.9.48.155",10086);
//用于向服务器端输出数据
OutputStream os = ClientSocket.getOutputStream();
//用于接收服务器端的反馈
InputStream is = ClientSocket.getInputStream();
//将字节流通过转换流转换成字符流
OutputStreamWriter osw = new OutputStreamWriter(os,"UTF-8");
InpusStreamReader isr = new InputStreamReader(is,"UTF-8");
//将字符流转换成字符缓冲流,效率更高
BufferedWriter bw = new BufferedWriter(osw);
BufferedReader br = new BufferedReader(isr);
String s = "好久不见,甚是想你";
bw.write(bw);
bw.newLine();//另起一行,令客户端知道上一行是需要接收的内容
bw.flush();//刷新缓存,零数据发送出去
String feedback = br.readLine();
System.out.println("服务器回应道:" + data);
ClientSocket.close();
os.close();
is.close();
osw.close();
isr.close();
bw.close();
br.close();
这篇文章讲解了什么是网络编程,以及在java中如何实现基于TCP协议的网络编程。