针对“Java网络编程之TCP通信完整代码示例”的完整攻略,我们可以分为以下几个部分来进行讲解:
- TCP通信基础
- Java TCP客户端和服务端代码编写
- 示例展示
接下来将分别说明。
1. TCP通信基础
TCP(Transmission Control Protocol)是一种面向连接的可靠的传输控制协议。其中面向连接是指进行数据传输前需要建立连接,传输完成后要断开连接;可靠的传输控制是指可以保证数据传输的可靠性,确保数据不会丢失和错乱。
TCP数据传输包含三个阶段:建立连接、数据传输和断开连接。在建立连接阶段,客户端与服务端进行握手,建立连接;在数据传输阶段,双方进行数据传输;在断开连接阶段,双方进行连接的断开。在这个过程中,双方都需要通过Socket(套接字)进行通信。
2. Java TCP客户端和服务端代码编写
针对Java TCP客户端和服务端代码的编写,我们可以分别编写两段代码来分别实现客户端和服务端的功能。
客户端代码
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) {
try {
// 与服务端建立连接
Socket socket = new Socket("localhost", 8888);
// 获取客户端输出流,向服务端发送数据
OutputStream outputStream = socket.getOutputStream();
String message = "Hello, TCP!";
outputStream.write(message.getBytes());
// 获取客户端输入流,接收服务端返回的数据
InputStream inputStream = socket.getInputStream();
byte[] buffer = new byte[1024];
int len = inputStream.read(buffer);
String result = new String(buffer, 0, len);
System.out.println("Client received message: " + result);
// 关闭流和Socket连接
outputStream.close();
inputStream.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在客户端代码中,我们首先使用Socket对象进行与服务端的连接。然后通过输出流向服务端发送数据,接着通过输入流接收服务端返回的数据。最后关闭流和Socket连接。
服务端代码
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServer {
// 服务端主程序
public static void main(String[] args) {
try {
// 创建服务端Socket对象
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("Server started...");
// 等待客户端连接
Socket socket = serverSocket.accept();
System.out.println("Client connected...");
// 获取服务端输入流,接收客户端发送过来的数据
InputStream inputStream = socket.getInputStream();
byte[] buffer = new byte[1024];
int len = inputStream.read(buffer);
String message = new String(buffer, 0, len);
System.out.println("Server received message: " + message);
// 获取服务端输出流,向客户端发送数据
OutputStream outputStream = socket.getOutputStream();
String result = "Welcome to join our chat group!";
outputStream.write(result.getBytes());
// 关闭流和Socket连接
inputStream.close();
outputStream.close();
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在服务端代码中,我们首先创建ServerSocket对象。然后通过这个对象等待客户端进行连接,并获取客户端输入流,接收客户端发送过来的数据。接着通过服务端输出流向客户端发送数据。最后关闭流和Socket连接。
3. 示例展示
我们可以使用两个示例来展示Java TCP客户端和服务端的通信过程。
示例1
在该示例中,我们启动服务端和客户端程序,客户端向服务端发送一条数据,服务端接收并打印出来,然后向客户端发送一条欢迎信息。
服务端代码:
public class Server {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(8888);
System.out.println("Server started...");
Socket s = ss.accept();
System.out.println("Client connected...");
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();
byte[] buffer = new byte[1024];
int len = in.read(buffer);
String message = new String(buffer, 0, len);
System.out.println("Server received message: " + message);
out.write("Welcome to join our chat group!".getBytes());
in.close();
out.close();
s.close();
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端代码:
public class Client {
public static void main(String[] args) {
try {
Socket s = new Socket("localhost", 8888);
OutputStream out = s.getOutputStream();
String message = "Hello, TCP!";
out.write(message.getBytes());
InputStream in = s.getInputStream();
byte[] buffer = new byte[1024];
int len = in.read(buffer);
String result = new String(buffer, 0, len);
System.out.println("Client received message: " + result);
out.close();
in.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
执行结果:
Server started...
Client connected...
Server received message: Hello, TCP!
示例2
在该示例中,我们在服务端程序中实现了一个倒计时。客户端向服务端发送一条数据,服务端开始倒计时,并在倒计时结束后向客户端发送一条信息。
服务端代码:
public class Server {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(8888);
System.out.println("Server started...");
Socket s = ss.accept();
System.out.println("Client connected...");
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();
byte[] buffer = new byte[1024];
int len = in.read(buffer);
String message = new String(buffer, 0, len);
System.out.println("Server received message: " + message);
int time = Integer.parseInt(message);
for (int i = time; i >= 0; i--) {
Thread.sleep(1000);
System.out.println(i);
}
out.write("Countdown finished!".getBytes());
in.close();
out.close();
s.close();
ss.close();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
客户端代码:
public class Client {
public static void main(String[] args) {
try {
Socket s = new Socket("localhost", 8888);
OutputStream out = s.getOutputStream();
String message = "10";
out.write(message.getBytes());
InputStream in = s.getInputStream();
byte[] buffer = new byte[1024];
int len = in.read(buffer);
String result = new String(buffer, 0, len);
System.out.println("Client received message: " + result);
out.close();
in.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
执行结果:
Server started...
Client connected...
Server received message: 10
10
9
8
7
6
5
4
3
2
1
0
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java网络编程之TCP通信完整代码示例 - Python技术站