目录
1. TCP/IP:
三次握手、四次挥手、面向连接安全可靠的传输协议,相对时间慢。准确性高,适用于对数据准确性有要求的场合
2.TCP/IP的三次握手:
三次握手:
第一次握手:客户端发送SYN请求报文到服务端,服务端收到客户端发来的请求。
第二次握手:服务端发送SYN/ACK报文到客户端,客户端收到SYN/ACK报文
第三次握手:客户端发送ACK确认报文,确认号Y+1,服务器端收到ACK确认报文。
3.服务器端代码
package com.hqyj.test; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class ServerTest { public static void main(String[] args) { InputStream is=null; OutputStream os=null; ServerSocket ss=null; Socket socket=null; try { //创建服务端套接字对象,定端口号为6666,用来接收客户端发来的socket对象 ss = new ServerSocket(6666); //接收客户端发来的socket,当服务器没有接收socket时,会发生阻塞 socket = ss.accept(); //用流来接受客户端发来的内容 //从套接字中获取字节输入流 is = socket.getInputStream(); //准备字节数组,作为进行读取的介质 byte[] b = new byte[1024]; //从字节流中读取内容,读取到数组中,并返回读取的字节数量 int length=is.read(b); // 将字节数组拼成字符串 String content = new String(b, 0, length); System.out.println("客户端:"+content); //通过输出流向客户端发送回复 //获取字节输出流,进行回复 os = socket.getOutputStream(); //准备一个回复语句 String response = "这里是服务端,请问您有什么问题"; //将回复语句转换为字节数组进行传递 os.write(response.getBytes()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { is.close(); os.close(); socket.close(); ss.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
4.客户端代码:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
public class ClientTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Socket socket = null;
OutputStream os = null;
InputStream is = null;
try {
//创建socket对象,定IP地址和端口号
socket = new Socket("127.0.0.1",9999);
从套接字中获取字节输出流
os = socket.getOutputStream();
//准备一个输入语句
Scanner scan = new Scanner(System.in);
String request = scan.next();
//将发送请求转换为字符数组进行传递
os.write(request.getBytes());
//获取字节输入流进行读取确认
is = socket.getInputStream();
//定义一个字节数组,作为进行读取的介质
byte b[] = new byte[1024];
//从字节流中读取内容,读取到数组中,并返回读取的字节数量
int length=is.read(b);
String str = "";
//将数组拼接到字符串
str=new String(b,0,length);
System.out.println(str);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
is.close();
os.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
5.总结:
通过在华清远见的学习,我了解了TCP/IP网络通信实现的流程,能够实现TCP网络通信中服务端和客户端的连接。