Tcp
tcp的特点:
1. tcp协议通讯是面向连接的,tcp的客户端一旦建立,马上要与服务端建立连接。
2. tcp协议在连接中传输大数据量,tcp是基于IO流进行数据传输。
3. 通过三次握手机制连接,可靠协议(保证数据传输的完整性)
4. 因为tcp是面向连接的,所以效率稍低.
5. tcp协议是分客户端与服务端。
tcp协议下的Socket :
Socket(客户端类)
ServerSocket(服务端类)
客户端
//第一步: 建立tcp客户端服务。
Socket socket= new Socket(InetAddress.getByName("192.168.1.13"),8080);
//获取socket的输入流对象
InputStream inputStream = socket.getInputStream();
//建立一个文件的输出流对象
FileOutputStream fileOutputStream = new FileOutputStream("f:\\美女.mp3");
//边读边写
……………………IO流中的内容
服务端
//第一步: 建立tcp的服务端。
ServerSocket serverSocket = new ServerSocket(9090);
//第二步:接受客户端的连接
Socket socket = serverSocket.accept(); // accept() 是一个阻塞型的方法,没有客户端与其连接的时候,一致等待下去
//第三步: 获取socket对应的流通道
InputStream inputStream = socket.getInputStream();
//第四步: 通过输入流通道读取数据
…………IO流中的内容
Udp:
udp协议的特点
1. 发送数据都是需要把数据封装到数据包中再发送 的,面向无连接。
2. 数据包大小不能超过64kb。
3. 因为udp协议是面向无连接的, 所以会出现数据包丢失的情况。
4. 因为面向无连接,所以速度快。
5. udp协议是不分客户端与服务端,只分发送端与接收端。
数据包在什么情况下会丢失呢:
1. 带宽不足的时候。
2. cpu处理能力不足 的时候。
接收端:
//第一步: 建立udp的服务,并且要监听一个端口
DatagramSocket socket = new DatagramSocket(9090);
//第二步: 准备 一个空的数据包
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
//第三步: 调用up的服务接受数据包, 数据其实是存入了字节数组中的。数据包是依赖于字节数据存储东西的。
socket.receive(packet); // receive()该方法是一个阻塞型的方法, 如果没有接受数据的时候,会一直等待下去。
System.out.println(packet.getAddress().getHostAddress()+ "接收端接收到的数据:"+ new String(buf,0,packet.getLength())); // getLength() 获取本次接收到的字节个数。
// getAddress() 获取对方的IP地址对象 ,
socket.close();
发送端:
//第一步: 建立udp的服务
DatagramSocket socket = new DatagramSocket();
//第二步: 准备数据,把数据封装到数据包中
String data = "这个是我的第一个udp的例子!!";
byte[] buf = data.getBytes();
DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.1.68"),9090);
//第三步:调用udp的服务发送数据
socket.send(packet);
//第四步: 关闭资源(释放端口号)
socket.close();
tcp的特点:
1. tcp协议通讯是面向连接的,tcp的客户端一旦建立,马上要与服务端建立连接。
2. tcp协议在连接中传输大数据量,tcp是基于IO流进行数据传输。
3. 通过三次握手机制连接,可靠协议(保证数据传输的完整性)
4. 因为tcp是面向连接的,所以效率稍低.
5. tcp协议是分客户端与服务端。
tcp协议下的Socket :
Socket(客户端类)
ServerSocket(服务端类)
客户端
//第一步: 建立tcp客户端服务。
Socket socket= new Socket(InetAddress.getByName("192.168.1.13"),8080);
//获取socket的输入流对象
InputStream inputStream = socket.getInputStream();
//建立一个文件的输出流对象
FileOutputStream fileOutputStream = new FileOutputStream("f:\\美女.mp3");
//边读边写
……………………IO流中的内容
服务端
//第一步: 建立tcp的服务端。
ServerSocket serverSocket = new ServerSocket(9090);
//第二步:接受客户端的连接
Socket socket = serverSocket.accept(); // accept() 是一个阻塞型的方法,没有客户端与其连接的时候,一致等待下去
//第三步: 获取socket对应的流通道
InputStream inputStream = socket.getInputStream();
//第四步: 通过输入流通道读取数据
…………IO流中的内容
Udp:
udp协议的特点
1. 发送数据都是需要把数据封装到数据包中再发送 的,面向无连接。
2. 数据包大小不能超过64kb。
3. 因为udp协议是面向无连接的, 所以会出现数据包丢失的情况。
4. 因为面向无连接,所以速度快。
5. udp协议是不分客户端与服务端,只分发送端与接收端。
数据包在什么情况下会丢失呢:
1. 带宽不足的时候。
2. cpu处理能力不足 的时候。
接收端:
//第一步: 建立udp的服务,并且要监听一个端口
DatagramSocket socket = new DatagramSocket(9090);
//第二步: 准备 一个空的数据包
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
//第三步: 调用up的服务接受数据包, 数据其实是存入了字节数组中的。数据包是依赖于字节数据存储东西的。
socket.receive(packet); // receive()该方法是一个阻塞型的方法, 如果没有接受数据的时候,会一直等待下去。
System.out.println(packet.getAddress().getHostAddress()+ "接收端接收到的数据:"+ new String(buf,0,packet.getLength())); // getLength() 获取本次接收到的字节个数。
// getAddress() 获取对方的IP地址对象 ,
socket.close();
发送端:
//第一步: 建立udp的服务
DatagramSocket socket = new DatagramSocket();
//第二步: 准备数据,把数据封装到数据包中
String data = "这个是我的第一个udp的例子!!";
byte[] buf = data.getBytes();
DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.1.68"),9090);
//第三步:调用udp的服务发送数据
socket.send(packet);
//第四步: 关闭资源(释放端口号)
socket.close();