您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
在Java网络通信中,Socket是一种非常重要的工具,它允许程序通过网络进行数据交换。以下是一些使用Socket的技巧:
setSoTimeout(int timeout)
方法设置读取操作的超时时间,防止无限期阻塞。socket.setSoTimeout(5000); // 设置5秒超时
BufferedReader
和BufferedWriter
来提高读写效率。BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
IOException
,务必进行适当的异常处理。try {
// 网络操作
} catch (IOException e) {
e.printStackTrace();
}
try {
if (in != null) in.close();
if (out != null) out.close();
if (socket != null) socket.close();
} catch (IOException e) {
e.printStackTrace();
}
// 定期发送心跳包
new Thread(() -> {
while (true) {
try {
out.write("heartbeat");
out.flush();
Thread.sleep(30000); // 每30秒发送一次
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}).start();
ExecutorService executor = Executors.newFixedThreadPool(10);
ServerSocket serverSocket = new ServerSocket(port);
while (true) {
Socket clientSocket = serverSocket.accept();
executor.submit(() -> handleClient(clientSocket));
}
// 发送JSON数据
String jsonData = "{\"name\":\"John\", \"age\":30}";
out.write(jsonData);
out.flush();
// 接收JSON数据
String receivedData = in.readLine();
JSONObject jsonObject = new JSONObject(receivedData);
SSLSocketFactory sslSocketFactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket sslSocket = (SSLSocket) sslSocketFactory.createSocket(host, port);
Logger logger = Logger.getLogger(YourClass.class.getName());
logger.info("Client connected: " + clientSocket.getInetAddress());
以下是一个简单的服务器和客户端示例:
服务器端
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8080);
System.out.println("Server started on port 8080");
while (true) {
Socket clientSocket = serverSocket.accept();
System.out.println("Client connected: " + clientSocket.getInetAddress());
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println("Received: " + inputLine);
out.write("Echo: " + inputLine);
out.newLine();
out.flush();
}
in.close();
out.close();
clientSocket.close();
}
}
}
客户端
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("localhost", 8080);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.write(userInput);
out.newLine();
out.flush();
String response = in.readLine();
System.out.println("Server response: " + response);
}
in.close();
out.close();
stdIn.close();
socket.close();
}
}
通过这些技巧和示例代码,你可以更有效地使用Java中的Socket进行网络通信。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。