一、网络通信
TCP是一种可靠的传输协议,它保证了数据的可靠传输。在网络通信中,TCP协议被广泛应用。例如,电子邮件、FTP文件传输、HTTP网页浏览等都是基于TCP/IP协议的。
以下是一个基于TCP协议的简单聊天室服务器和客户端代码示例:
// 服务器端代码
import java.io.*;
import java.net.*;
public class ChatServer {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(8080); // 创建服务器套接字
System.out.println("服务器已经启动...");
while (true) {
Socket s = ss.accept(); // 接收客户端套接字
System.out.println("客户端已经连接...");
InputStream is = s.getInputStream(); // 获取输入流
OutputStream os = s.getOutputStream(); // 获取输出流
BufferedReader br = new BufferedReader(new InputStreamReader(is)); // 读取客户端发送的信息
PrintWriter pw = new PrintWriter(new OutputStreamWriter(os), true); // 将服务端消息回传给客户端
pw.println("欢迎来到聊天室!");
while (true) {
String str = br.readLine();
if (str.equals("end")) {
break;
}
System.out.println("客户端说:" + str);
pw.println("服务器说:" + str);
}
s.close(); // 关闭客户端套接字
System.out.println("客户端已经关闭...");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 客户端代码
import java.io.*;
import java.net.*;
public class ChatClient {
public static void main(String[] args) {
try {
Socket s = new Socket("127.0.0.1", 8080); // 创建客户端套接字并连接服务器
InputStream is = s.getInputStream(); // 获取输入流
OutputStream os = s.getOutputStream(); // 获取输出流
BufferedReader br = new BufferedReader(new InputStreamReader(is)); // 读取服务端发送的信息
PrintWriter pw = new PrintWriter(new OutputStreamWriter(os), true); // 将客户端消息发送给服务端
while (true) {
String str = br.readLine();
if (str == null) {
break;
}
System.out.println(str);
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
pw.println(reader.readLine());
}
s.close(); // 关闭客户端套接字
} catch (IOException e) {
e.printStackTrace();
}
}
}
二、文件传输
TCP协议可以保证数据的可靠传输,因此在文件传输的场景下,TCP协议也是很常用的。例如,在FTP文件传输、P2P文件共享等应用中,都广泛使用了TCP协议。
以下是一个基于TCP协议的文件传输服务器和客户端代码示例:
// 服务器端代码
import java.io.*;
import java.net.*;
public class FileServer {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(8080); // 创建服务器套接字
System.out.println("服务器已经启动...");
while (true) {
Socket s = ss.accept(); // 接收客户端套接字
System.out.println("客户端已经连接...");
InputStream is = s.getInputStream(); // 获取输入流
OutputStream os = s.getOutputStream(); // 获取输出流
BufferedInputStream bis = new BufferedInputStream(is); // 创建输入缓冲流
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("file.txt")); // 创建输出缓冲流
byte[] buffer = new byte[1024];
int len;
while ((len = bis.read(buffer, 0, buffer.length)) != -1) {
bos.write(buffer, 0, len);
}
bos.flush();
bos.close();
bis.close();
s.close(); // 关闭客户端套接字
System.out.println("客户端已经关闭...");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 客户端代码
import java.io.*;
import java.net.*;
public class FileClient {
public static void main(String[] args) {
try {
Socket s = new Socket("127.0.0.1", 8080); // 创建客户端套接字并连接服务器
InputStream is = s.getInputStream(); // 获取输入流
OutputStream os = s.getOutputStream(); // 获取输出流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("file.txt")); // 创建输入缓冲流
BufferedOutputStream bos = new BufferedOutputStream(os); // 创建输出缓冲流
byte[] buffer = new byte[1024];
int len;
while ((len = bis.read(buffer, 0, buffer.length)) != -1) {
bos.write(buffer, 0, len);
}
bos.flush();
bos.close();
bis.close();
s.close(); // 关闭客户端套接字
} catch (IOException e) {
e.printStackTrace();
}
}
}
三、远程控制
在远程控制场景下,TCP协议也是非常重要的。例如,在远程桌面控制、远程维护等应用中,都需要使用TCP协议。
以下是一个基于TCP协议的远程控制服务器和客户端代码示例:
// 服务器端代码
import java.awt.*;
import java.io.*;
import java.net.*;
public class RemoteServer {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(8080); // 创建服务器套接字
System.out.println("服务器已经启动...");
while (true) {
Socket s = ss.accept(); // 接收客户端套接字
System.out.println("客户端已经连接...");
OutputStream os = s.getOutputStream();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Robot robot = new Robot();
int width = (int) screenSize.getWidth();
int height = (int) screenSize.getHeight();
Rectangle screenRect = new Rectangle(0, 0, width, height);
BufferedImage image = robot.createScreenCapture(screenRect);
ImageIO.write(image, "jpg", os);
os.flush();
os.close();
s.close(); // 关闭客户端套接字
System.out.println("客户端已经关闭...");
}
} catch (IOException | AWTException e) {
e.printStackTrace();
}
}
}
// 客户端代码
import java.awt.*;
import java.io.*;
import java.net.*;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class RemoteClient {
public static void main(String[] args) {
try {
Socket s = new Socket("127.0.0.1", 8080); // 创建客户端套接字并连接服务器
InputStream is = s.getInputStream(); // 获取输入流
byte[] buffer = new byte[1024];
BufferedImage image = ImageIO.read(is);
ImageIcon icon = new ImageIcon(image);
JFrame frame = new JFrame("远程监控");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new JLabel(icon));
frame.pack();
frame.setVisible(true);
is.close();
s.close(); // 关闭客户端套接字
} catch (IOException e) {
e.printStackTrace();
}
}
}
四、音视频传输
TCP协议在音视频传输场景下并不常用,因为它的可靠性会对音视频传输的实时性产生影响。在音视频传输场景下,一般会选择UDP协议,以获得更好的实时性。
以下是一个基于TCP协议的音视频传输服务器和客户端代码示例:
// 服务器端代码
import java.io.*;
import java.net.*;
public class AVServer {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(8080); // 创建服务器套接字
System.out.println("服务器已经启动...");
while (true) {
Socket s = ss.accept(); // 接收客户端套接字
System.out.println("客户端已经连接...");
InputStream is = s.getInputStream(); // 获取输入流
OutputStream os = s.getOutputStream(); // 获取输出流
byte[] buffer = new byte[1024];
int len;
while ((len = is.read(buffer, 0, buffer.length)) != -1) {
os.write(buffer, 0, len);
os.flush();
}
os.close();
is.close();
s.close(); // 关闭客户端套接字
System.out.println("客户端已经关闭...");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 客户端代码
import java.io.*;
import java.net.*;
public class AVClient {
public static void main(String[] args) {
try {
Socket s = new Socket("127.0.0.1", 8080); // 创建客户端套接字并连接服务器
InputStream is = new FileInputStream("av.mp4"); // 获取输入流
OutputStream os = s.getOutputStream(); // 获取输出流
byte[] buffer = new byte[1024];
int len;
while ((len = is.read(buffer, 0, buffer.length)) != -1) {
os.write(buffer, 0, len); // 写入数据
os.flush();
}
os.close();
is.close();
s.close(); // 关闭客户端套接字
} catch (IOException e) {
e.printStackTrace();
}
}
}
原创文章,作者:JOVZJ,如若转载,请注明出处:https://www.506064.com/n/370284.html
微信扫一扫
支付宝扫一扫