TCP通信
- 特点:面向连接、可靠通信。
- 通信双方事先会采用 “三次握手〞 方式建立可靠连接,实现端到端的通信;底层能保证数据成功传给服务端。
- Java提供了一个java.net.socket类来实现TCP通信。

TCP通信——客户端开发
- 客户端程序就是通过java.net包 下的Socket类来实现的。
代码演示如下:
public class Client {
public static void main(String[] args) throws Exception{
System.out.println("客户端开启!");
//1.创建Socket对象,并同时请求与服务端程序的连接。
Socket socket = new Socket("127.0.0.1",8888);
//2.从socket通信管道中得到一个字节输出流。用来发数据给服务端程序
OutputStream os = socket.getOutputStream();
//3.把低级的字节输出流包装成数据输出流
DataOutputStream dos = new DataOutputStream(os);
//4.开始写数据出去了
dos.writeUTF("你好,Java!");
dos.close();
socket.close(); // 释放连接资源
}
}
TCP通信——服务端的开发
- 服务端是通过java.net包 下的Serversocket类来实现的。

代码演示如下:
public class Server {
public static void main(String[] args) throws Exception{
System.out.println("服务端开启!");
//1.创建ServerSocket的对象,同时为服务端注册端口。
ServerSocket serverSocket = new ServerSocket(8888);
//2.使用serverSocket对象,嗲用一个accept方法,等待客户端的连接请求
Socket socket = serverSocket.accept();
//3.从socket通信管道中得到一个字节输入流
InputStream is = socket.getInputStream();
//4.把原始的字节输入流包装成数据输入流
DataInputStream dis = new DataInputStream(is);
//5.使用数据输入流读取客户端发送过来的消息
String rs = dis.readUTF();
System.out.println(rs);
//还可以获取客户端的IP地址
System.out.println(socket.getRemoteSocketAddress());
dis.close();
socket.close();
}
}
实现多发多收,就要把代码改成循环。具体演示看下面部分代码:
客户端:
public class Client {
public static void main(String[] args) throws Exception{
System.out.println("客户端开启!");
//1.创建Socket对象,并同时请求与服务端程序的连接。
Socket socket = new Socket("127.0.0.1",8888);
//2.从socket通信管道中得到一个字节输出流。用来发数据给服务端程序
OutputStream os = socket.getOutputStream();
//3.把低级的字节输出流包装成数据输出流
DataOutputStream dos = new DataOutputStream(os);
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请输入:");
String msg = sc.nextLine();
//一旦用户输入了exit,就退出客户端程序
if ("exit".equals(msg)){
System.out.println("退出成功!");
dos.close();
socket.close();
break;
}
//4.开始写数据出去了
dos.writeUTF(msg);
dos.flush();
}
}
}
服务端:
public class Server {
public static void main(String[] args) throws Exception{
System.out.println("服务端开启!");
//1.创建ServerSocket的对象,同时为服务端注册端口。
ServerSocket serverSocket = new ServerSocket(8888);
//2.使用serverSocket对象,嗲用一个accept方法,等待客户端的连接请求
Socket socket = serverSocket.accept();
//3.从socket通信管道中得到一个字节输入流
InputStream is = socket.getInputStream();
//4.把原始的字节输入流包装成数据输入流
DataInputStream dis = new DataInputStream(is);
while (true) {
try {
//5.使用数据输入流读取客户端发送过来的消息
String rs = dis.readUTF();
System.out.println(rs);
} catch (Exception e) {
System.out.println(socket.getRemoteSocketAddress() + "离线了~");
dis.close();
socket.close();
}
}
}
}


















