1、TCP通信同UDP通信一样,都能实现两台计算机之间的通信,通信的两端都需要创建socket对象。
2、区别在于,UDP中只有发送端和接收端,不区分客户端与服务器端,计算机之间可以任意地发送数据。
3、而TCP通信是严格区分客户端与服务器端的,在通信时,必须先由客户端去连接服务器端才能实现通信,服务器端不可以主动连接客户端,并且服务器端程序需要事先启动,等待客户端的连接。
4、UDP主要关注接收端监听接收端的端口号;TCP主要关注服务器端的端口号
TCPServer.java(服务器端):
package cn.xxx.demo; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; /* * 实现TCP服务器程序 * 服务器端套接字类: java.net.ServerSocket * 客户端套接字类: java.net.Socket * 构造方法: * ServerSocket(int port) 传递端口号 * * 注意: 必须要通过accept()方法,获得客户端的套接字对象Socket */ public class TCPServer { public static void main(String[] args) throws IOException{ ServerSocket server = new ServerSocket(8888); // 创建服务器端套接字,指定端口号 Socket socket = server.accept(); // 通过accept()方法,获取客户端套接字。 会阻塞线程,直到获取到客户端连接的套接字。 //通过客户端套接字socket,获取字节输入流;读取客户端发送来的数据 InputStream in = socket.getInputStream(); byte[] data = new byte[1024]; int len = in.read(data); // 从字节输入流中读取数据到字节数组中,返回读取长度 System.out.println(new String(data,0,len)); //通过客户端套接字socket,获取字节输出流;向客户端写数据 OutputStream out = socket.getOutputStream(); out.write("收到,谢谢".getBytes()); InetAddress inet = socket.getLocalAddress(); // 通过客户端套接字,获取客户端IP对象 socket.close(); // 关闭资源。 同时会关闭套接字中的输入、输出流 server.close(); // 关闭资源 } }TCPClient.java(客户端):
package cn.xxx.demo; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; public class TCPClient { public static void main(String[] args)throws IOException { //创建Socket对象,连接服务器。 构造函数一执行,就会进行TCP连接(连接失败,抛异常) Socket socket = new Socket("127.0.0.1", 8888); // 创建客户端套接字,指定服务器地址和服务器端口号 //通过客户端的套接字Socket,获取字节输出流,将数据写向服务器 OutputStream out = socket.getOutputStream(); out.write("服务器OK".getBytes()); //通过客户端的套接字Socket,获取字节输入流,读取服务器端的数据 InputStream in = socket.getInputStream(); byte[] data = new byte[1024]; int len = in.read(data); System.out.println(new String(data,0,len)); socket.close(); // 关闭资源。 同时会关闭套接字中的输入、输出流 } }