package me.test.jdk.java.net.socket;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;
import java.net.Socket;
import java.net.UnknownHostException;
import java.nio.charset.StandardCharsets;
public class MyEchoClient {
public static void main(String[] args) throws UnknownHostException, IOException {
byte[] userMsgs = null;
if (args.length == 0) {
// 模拟的用户输入
userMsgs = new byte[] {
'I',
-26, -120, -111, // '我',
-26, // malformed
'I',
'I',
'.'
};
} else {
userMsgs = args[0].getBytes(StandardCharsets.UTF_8);
}
if (userMsgs.length == 0) {
}
Socket socket = new Socket("localhost", 9999);
new Thread(new EchoRespMsgHander(socket)).start();
new Thread(new UserMsgHander(socket, userMsgs)).start();
}
/**
* Read user input and sent it to echo server.
*/
private static class UserMsgHander implements Runnable {
private byte[] userMsgs;
private Socket socket;
public UserMsgHander(Socket socket, byte[] userMsgs) {
this.socket = socket;
this.userMsgs = userMsgs;
}
@Override
public void run() {
// send message to sever
try {
OutputStream out = socket.getOutputStream();
for (byte b : userMsgs) {
out.write(b);
out.flush();
System.out.println(">>> '" + b + "'");
Thread.sleep(1000);
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* Read msg from echo server, and print it to stdout.
*/
private static class EchoRespMsgHander implements Runnable {
private Socket socket;
public EchoRespMsgHander(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
Reader reader = new InputStreamReader(new BufferedInputStream(socket.getInputStream()), "UTF-8");
int i;
while ((i = reader.read()) != -1) {
char c = (char) i;
System.out.println("<<< '" + c + "'");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}