//服務端
import com.hl.bluetooth.util.CRC16;
import com.hl.bluetooth.util.FrameCheckFailedException;
import com.hl.bluetooth.util.stream.StreamUtils;
import com.hl.bluetooth.util.util;
import lombok.SneakyThrows;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.ByteBuffer;
import java.util.Arrays;
/**
* @author hwx
* @date 2021/11/4
*/
public class TcpServer extends ServerSocket {
private static final Logger logger = LoggerFactory.getLogger(TcpServer.class);
public TcpServer(int serverPort) throws IOException {
super(serverPort);
try {
while (true) {
Socket socket = accept();
new ServerThread(socket);
}
} catch (Exception e) {
logger.error("tcp服務器已停止監聽");
} finally {
close();
}
}
class ServerThread extends Thread /*建立服務端線程*/ {
private Socket socket;
private DataInputStream inputStream;
private InputStream in;
private InputStream i;
private byte[] bytes;
private DataOutputStream out;
public ServerThread(Socket s) throws Exception {
logger.info("tcp服務器開始監聽......");
this.socket = s;
in = socket.getInputStream();
inputStream = new DataInputStream(in);
/* in = new BufferedReader(new InputStreamReader(
socket.getInputStream(), "GB2312")); *//*國標碼*/
out = new DataOutputStream(socket.getOutputStream());
String str = s.getInetAddress().getHostAddress();
StreamUtils.setOutputStream(s.getInetAddress().getHostAddress(), new DataOutputStream(socket.getOutputStream()));
StreamUtils.setInputStream(s.getInetAddress().getHostAddress(), new DataInputStream(socket.getInputStream()));
// 開始線程
start();
}
@SneakyThrows
@Override
public void run() {
try {
Scanner scanner = new Scanner(System.in);// 裝飾標准輸入流,用於從控制台輸入
while (true) {
String send = scanner.nextLine();//讀取控制台輸入的內容
System.out.println("客戶端:" + send);//輸出鍵盤輸出內容提示 ,也就是客戶端向服務器端發送的消息
// 把從控制台得到的信息傳送給服務器
out.writeUTF("客戶端:" + send);//將客戶端的信息傳遞給服務器
String accpet = in.readUTF();// 讀取來自服務器的信息
System.out.println(accpet);//輸出來自服務器的信息
} } catch (Exception e) { logger.error(socket.getInetAddress().getHostAddress() + "連接斷開-----" + e.getMessage(), e); } finally { DataOutputStream outputStream = StreamUtils.getOutputStream(socket.getInetAddress().getHostAddress()); outputStream.close(); inputStream.close(); socket.close(); } }
//客戶端
import java.io.*; import java.net.Socket; import java.net.UnknownHostException; /** * @author hwx * @date 2021/11/4 */ public class TcpClient { /** * 定義socket連接 */ private Socket socket; private DataInputStream inputStream; /** * 打印到文本輸出流 */ private PrintWriter writer; private OutputStream outputStream; public TcpClient(int serverPort) { /*定義客戶端端口號*/ try { /*拋異常*/ socket = new Socket("192.168.153.202", serverPort); inputStream = new DataInputStream( /*標准輸入輸出流*/ socket.getInputStream()); writer = new PrintWriter(socket.getOutputStream()); outputStream = socket.getOutputStream(); while (true) { BufferedReader in = new BufferedReader( new InputStreamReader(System.in)); String message = in.readLine();if ("finish".equals(message)) { System.out.println("服務器已停止監聽"); break; } } outputStream.close(); writer.close(); inputStream.close(); /*關閉流*/ socket.close(); } catch (UnknownHostException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); /*在命令行打印異常信息在程序中出錯的位置及原因*/ } } }