/*
* TCP协议
* TCP与UDP协议的区别:
* UDP;
* 1. 将数据封装为数据包,面向无连接;
* 2. 每个数据包大小为64k;
* 3. 因为无连接,所有不可靠:
* 4. 因为不需要建立连接,所有速度快:
* 5. UDP通信是部分服务端和客户端的,只分发送与接收端:
*
* TCP:
*1. TCP是基于I/O流进行数据的传输,是面向连接的(首先要建立连接才能进行通信);
*2. TCP进行数据传输没有数据大小限制;
*3. 面向连接,通过3次捂手的机制保障数据的完整性,是一个可靠的协议;
*4. tcp是面向连接的所以慢;
*5. 严格区分客户端和服务端;
*
*TCP的Socket类
*Socket 客户端类
*说明:TCP的客户端一旦启动,马上会与服务端建立连接
*ServerSocket 服务端类
*
*TCP的客户端使用步骤:
*1. 建立TCP的客户端服务
*2. 获取对应的流对象;
*3. 玲输出流输出数据:
*4. 关闭资源;
*
*TCP服务端的使用步骤:
* 1. 建立TCP的服务端;
* 2. 接收客户端的请求产生一个Scoket:
* 2. 获取对应的对象获取到输入流:
* 4.使用输入流输出数据;
*/
package com.lin.michael;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
//客户端
public class Demo06 {
public static void main(String[] args) throws UnknownHostException, IOException{
//1.建立tcp的服务
Socket socket = new Socket(InetAddress.getLocalHost(), 9090);
//2.获取到Socket输出流对象
OutputStream outputStream = socket.getOutputStream();
//3.利用输出流输出数据
outputStream.write("你好,吃饭了吗".getBytes());
//接收来自服务端的数据
InputStream inputStream = socket.getInputStream();
byte[] buf = new byte[1024];
int length = 0;
length = inputStream.read(buf);
System.out.println("客户端接收的数据:" + new String(buf, 0, length));
//4.关闭资源
//outputStream.close();s
socket.close();
}
}
===============================================
/*
* 服务端socket
*
*/
package com.lin.michael;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
//服务端
public class Demo07 {
public static void main(String[] args) throws IOException{
//1.建立tcp的服务端
ServerSocket serverSocket = new ServerSocket(9090);
//2. 调用ServerSocket对象的accept()的作用是接收连接,也是一个是阻塞型的方法,接收可短的连接,没有客户端请求的连接的时候会一直等下去,获取到一个Sokcet对象
Socket socket = serverSocket.accept();
//3. 从socket总获取输入流,输出数据
InputStream inputStream = socket.getInputStream();
byte[] buf = new byte[1024];
int length = 0;
length = inputStream.read(buf);
System.out.println("服务端接收的数据:" + new String(buf, 0, length));
//获取Socket的输入流对象,向客户端发送数据
OutputStream outputStream = socket.getOutputStream();
outputStream.write("客户端你好啊".getBytes());
//关闭资源
serverSocket.close();
}
}