commit
This commit is contained in:
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
.vscode/
|
||||
.idea/
|
||||
out/
|
||||
*.iml
|
||||
95
java/client/src/socket/client/ClientApp.java
Normal file
95
java/client/src/socket/client/ClientApp.java
Normal file
@@ -0,0 +1,95 @@
|
||||
package socket.client;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.Socket;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class ClientApp {
|
||||
private static Socket client;
|
||||
private static Thread inThread;
|
||||
private static Thread outThread;
|
||||
|
||||
public static void main(String[] args) throws IOException {
|
||||
client = new Socket("127.0.0.1", 8888);
|
||||
inThread = new Thread(ClientApp::inputHandle);
|
||||
outThread = new Thread(ClientApp::outputHandle);
|
||||
|
||||
inThread.start();
|
||||
outThread.start();
|
||||
|
||||
try {
|
||||
inThread.join();
|
||||
outThread.join();
|
||||
} catch (InterruptedException e) {
|
||||
closeConnect();
|
||||
}
|
||||
}
|
||||
|
||||
private static void inputHandle() {
|
||||
BufferedReader in;
|
||||
try {
|
||||
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
closeConnect();
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
while (!client.isClosed() || !Thread.currentThread().isInterrupted()) {
|
||||
String message = in.readLine();
|
||||
if (message != null) {
|
||||
System.out.printf("INCOMMING MESSAGE: %s\n", message);
|
||||
}
|
||||
|
||||
try {
|
||||
TimeUnit.SECONDS.sleep(1);
|
||||
} catch (InterruptedException e) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
closeConnect();
|
||||
}
|
||||
}
|
||||
|
||||
private static void outputHandle() {
|
||||
BufferedWriter out;
|
||||
try {
|
||||
out = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
closeConnect();
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
while (!client.isClosed() || !Thread.currentThread().isInterrupted()) {
|
||||
String pingJson = String.format("{\"ping\": %d}\n", System.currentTimeMillis());
|
||||
out.write(pingJson);
|
||||
out.flush();
|
||||
|
||||
try {
|
||||
TimeUnit.SECONDS.sleep(1);
|
||||
} catch (InterruptedException e) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
closeConnect();
|
||||
}
|
||||
}
|
||||
|
||||
private static void closeConnect() {
|
||||
inThread.interrupt();
|
||||
outThread.interrupt();
|
||||
|
||||
try {
|
||||
client.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
118
java/server/src/socket/server/ServerApp.java
Normal file
118
java/server/src/socket/server/ServerApp.java
Normal file
@@ -0,0 +1,118 @@
|
||||
package socket.server;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.InetAddress;
|
||||
import java.net.ServerSocket;
|
||||
import java.net.Socket;
|
||||
import java.net.SocketTimeoutException;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class ServerApp {
|
||||
private static final List<ClientHandler> clients = new CopyOnWriteArrayList<>();
|
||||
|
||||
@SuppressWarnings("InfiniteLoopStatement")
|
||||
public static void main(String[] args) throws IOException {
|
||||
ServerSocket server = new ServerSocket(8888, 50, InetAddress.getByName("localhost"));
|
||||
server.setSoTimeout(5 * 1000);
|
||||
|
||||
while (true) {
|
||||
System.out.println("[i] wait client...");
|
||||
Socket client;
|
||||
try {
|
||||
client = server.accept();
|
||||
} catch (SocketTimeoutException e) {
|
||||
continue;
|
||||
}
|
||||
|
||||
clients.add(new ClientHandler(client));
|
||||
System.out.printf("[i] client connected (%d/50).\n", clients.size());
|
||||
}
|
||||
}
|
||||
|
||||
public static class ClientHandler {
|
||||
private final Socket client;
|
||||
private final Thread inThread;
|
||||
private final Thread outThread;
|
||||
|
||||
public ClientHandler(Socket client) {
|
||||
this.client = client;
|
||||
this.inThread = new Thread(this::inputHandle);
|
||||
this.outThread = new Thread(this::outputHandle);
|
||||
|
||||
this.inThread.start();
|
||||
this.outThread.start();
|
||||
}
|
||||
|
||||
private void inputHandle() {
|
||||
BufferedReader in;
|
||||
try {
|
||||
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
|
||||
} catch (IOException e1) {
|
||||
e1.printStackTrace();
|
||||
closeConnect();
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
while (!client.isClosed() || !Thread.currentThread().isInterrupted()) {
|
||||
String message = in.readLine();
|
||||
if (message != null) {
|
||||
System.out.printf("INCOMMING MESSAGE: %s\n", message);
|
||||
}
|
||||
|
||||
try {
|
||||
TimeUnit.SECONDS.sleep(1);
|
||||
} catch (InterruptedException e) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
closeConnect();
|
||||
}
|
||||
}
|
||||
|
||||
private void outputHandle() {
|
||||
BufferedWriter out;
|
||||
try {
|
||||
out = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
|
||||
} catch (IOException e1) {
|
||||
e1.printStackTrace();
|
||||
closeConnect();
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
while (!client.isClosed() || !Thread.currentThread().isInterrupted()) {
|
||||
String pingJson = String.format("{\"ping\": %d}\n", System.currentTimeMillis());
|
||||
out.write(pingJson);
|
||||
out.flush();
|
||||
|
||||
try {
|
||||
TimeUnit.SECONDS.sleep(1);
|
||||
} catch (InterruptedException e) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
closeConnect();
|
||||
}
|
||||
}
|
||||
|
||||
private void closeConnect() {
|
||||
this.inThread.interrupt();
|
||||
this.outThread.interrupt();
|
||||
|
||||
try {
|
||||
client.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
clients.remove(this);
|
||||
System.out.printf("[i] client close connection (%d/50)\n", clients.size());
|
||||
}
|
||||
}
|
||||
}
|
||||
25
node/index.js
Normal file
25
node/index.js
Normal file
@@ -0,0 +1,25 @@
|
||||
import net from 'net'
|
||||
|
||||
const host = '127.0.0.1'
|
||||
const port = 8888
|
||||
const backlog = 50
|
||||
const server = net.createServer()
|
||||
|
||||
server.listen(port, host, backlog)
|
||||
|
||||
server.on('connection', (client) => {
|
||||
console.log('[i] client connected')
|
||||
|
||||
client.on('data', (data) => {
|
||||
console.log('INCOMMING MESSAGE: ' + data)
|
||||
})
|
||||
|
||||
let timerId = setInterval(() => {
|
||||
client.write(JSON.stringify({"ping": Date.now()}) + "\n")
|
||||
}, 1000)
|
||||
|
||||
client.on('close', () => {
|
||||
clearTimeout(timerId)
|
||||
console.log('[i] client close connection')
|
||||
})
|
||||
})
|
||||
13
node/package.json
Normal file
13
node/package.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"name": "node",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"type": "module",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"run": "node index.js"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC"
|
||||
}
|
||||
Reference in New Issue
Block a user