Full-stack Developer chuyên về Java Backend và JavaScript Frontend. Sẵn sàng đóng góp vào các dự án web development với kỹ năng vững chắc và tinh thần học hỏi không ngừng.
Mục lục
Mục lục
🌐 Build networked applications với Java Socket Programming - từ chat apps, file transfer đến multiplayer games!
importjava.io.*;importjava.net.*;publicclassSimpleTCPServer{publicstaticvoidmain(String[]args){intport=8080;try(ServerSocketserverSocket=newServerSocket(port)){System.out.println("🚀 Server started on port "+port);System.out.println("⏳ Waiting for client...");// Chấp nhận client connectionSocketclientSocket=serverSocket.accept();System.out.println("✅ Client connected: "+clientSocket.getInetAddress().getHostAddress());// Input stream - nhận data từ clientBufferedReaderin=newBufferedReader(newInputStreamReader(clientSocket.getInputStream()));// Output stream - gửi data tới clientPrintWriterout=newPrintWriter(clientSocket.getOutputStream(),true);// Đọc message từ clientStringclientMessage=in.readLine();System.out.println("📩 Client says: "+clientMessage);// Gửi response tới clientout.println("Server received: "+clientMessage);// Đóng connectionclientSocket.close();System.out.println("🔌 Connection closed");}catch(IOExceptione){System.err.println("❌ Server error: "+e.getMessage());e.printStackTrace();}}}
importjava.io.*;importjava.net.*;publicclassSimpleTCPClient{publicstaticvoidmain(String[]args){Stringhostname="localhost";intport=8080;try(Socketsocket=newSocket(hostname,port)){System.out.println("🔌 Connected to server");// Output stream - gửi data tới serverPrintWriterout=newPrintWriter(socket.getOutputStream(),true);// Input stream - nhận data từ serverBufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream()));// Gửi message tới serverStringmessage="Hello from Client!";out.println(message);System.out.println("📤 Sent to server: "+message);// Đọc response từ serverStringserverResponse=in.readLine();System.out.println("📥 Server response: "+serverResponse);}catch(UnknownHostExceptione){System.err.println("❌ Unknown host: "+hostname);}catch(IOExceptione){System.err.println("❌ I/O error: "+e.getMessage());}}}
importjava.io.*;importjava.net.*;importjava.util.concurrent.*;publicclassMultiClientTCPServer{privatestaticfinalintPORT=8080;privatestaticfinalExecutorServicethreadPool=Executors.newFixedThreadPool(10);publicstaticvoidmain(String[]args){try(ServerSocketserverSocket=newServerSocket(PORT)){System.out.println("🚀 Multi-Client Server started on port "+PORT);while(true){// Chấp nhận client connectionSocketclientSocket=serverSocket.accept();System.out.println("✅ New client connected: "+clientSocket.getInetAddress());// Xử lý client trong thread riêngthreadPool.execute(newClientHandler(clientSocket));}}catch(IOExceptione){System.err.println("❌ Server error: "+e.getMessage());}finally{threadPool.shutdown();}}// Inner class xử lý mỗi clientprivatestaticclassClientHandlerimplementsRunnable{privateSocketsocket;publicClientHandler(Socketsocket){this.socket=socket;}@Overridepublicvoidrun(){try(BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream()));PrintWriterout=newPrintWriter(socket.getOutputStream(),true)){StringclientAddress=socket.getInetAddress().toString();System.out.println("🔧 Handling client: "+clientAddress);// Đọc messages từ clientStringmessage;while((message=in.readLine())!=null){System.out.println("📩 ["+clientAddress+"]: "+message);// Echo backout.println("Echo: "+message);// Exit commandif(message.equalsIgnoreCase("exit")){break;}}System.out.println("🔌 Client disconnected: "+clientAddress);}catch(IOExceptione){System.err.println("❌ Error handling client: "+e.getMessage());}finally{try{socket.close();}catch(IOExceptione){e.printStackTrace();}}}}}
importjava.io.*;importjava.net.*;importjava.util.Scanner;publicclassInteractiveTCPClient{publicstaticvoidmain(String[]args){Stringhostname="localhost";intport=8080;try(Socketsocket=newSocket(hostname,port);PrintWriterout=newPrintWriter(socket.getOutputStream(),true);BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream()));Scannerscanner=newScanner(System.in)){System.out.println("🔌 Connected to server");System.out.println("Type messages (type 'exit' to quit):");while(true){// Input từ userSystem.out.print("\n> ");Stringmessage=scanner.nextLine();// Gửi tới serverout.println(message);// Exitif(message.equalsIgnoreCase("exit")){System.out.println("👋 Goodbye!");break;}// Nhận responseStringresponse=in.readLine();System.out.println("📥 Server: "+response);}}catch(IOExceptione){System.err.println("❌ Error: "+e.getMessage());}}}
importjava.io.*;importjava.net.*;importjava.util.*;importjava.util.concurrent.*;publicclassChatServer{privatestaticfinalintPORT=8080;privatestaticSet<ClientHandler>clients=ConcurrentHashMap.newKeySet();publicstaticvoidmain(String[]args){System.out.println("💬 Chat Server started on port "+PORT);try(ServerSocketserverSocket=newServerSocket(PORT)){while(true){Socketsocket=serverSocket.accept();ClientHandlerclient=newClientHandler(socket);clients.add(client);newThread(client).start();}}catch(IOExceptione){e.printStackTrace();}}// Broadcast message tới tất cả clientspublicstaticvoidbroadcast(Stringmessage,ClientHandlersender){for(ClientHandlerclient:clients){if(client!=sender){client.sendMessage(message);}}}publicstaticvoidremoveClient(ClientHandlerclient){clients.remove(client);}privatestaticclassClientHandlerimplementsRunnable{privateSocketsocket;privatePrintWriterout;privateStringusername;publicClientHandler(Socketsocket){this.socket=socket;}@Overridepublicvoidrun(){try(BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream()))){out=newPrintWriter(socket.getOutputStream(),true);// Nhận usernameout.println("Enter your username:");username=in.readLine();System.out.println("✅ "+username+" joined the chat");// Thông báo joinbroadcast(username+" joined the chat!",this);// Nhận messagesStringmessage;while((message=in.readLine())!=null){if(message.equalsIgnoreCase("/exit")){break;}System.out.println("["+username+"]: "+message);broadcast(username+": "+message,this);}}catch(IOExceptione){System.err.println("Error: "+e.getMessage());}finally{// Cleanupif(username!=null){System.out.println("❌ "+username+" left the chat");broadcast(username+" left the chat.",this);}removeClient(this);try{socket.close();}catch(IOExceptione){e.printStackTrace();}}}publicvoidsendMessage(Stringmessage){out.println(message);}}}
importjava.net.*;publicclassUDPServer{privatestaticfinalintPORT=9876;privatestaticfinalintBUFFER_SIZE=1024;publicstaticvoidmain(String[]args){try(DatagramSocketsocket=newDatagramSocket(PORT)){System.out.println("🚀 UDP Server started on port "+PORT);byte[]receiveBuffer=newbyte[BUFFER_SIZE];while(true){// Nhận packetDatagramPacketreceivePacket=newDatagramPacket(receiveBuffer,receiveBuffer.length);socket.receive(receivePacket);// Xử lý dataStringmessage=newString(receivePacket.getData(),0,receivePacket.getLength());InetAddressclientAddress=receivePacket.getAddress();intclientPort=receivePacket.getPort();System.out.println("📩 Received from "+clientAddress+":"+clientPort+" - "+message);// Gửi responseStringresponse="Echo: "+message;byte[]sendBuffer=response.getBytes();DatagramPacketsendPacket=newDatagramPacket(sendBuffer,sendBuffer.length,clientAddress,clientPort);socket.send(sendPacket);}}catch(Exceptione){e.printStackTrace();}}}
// Server - nhận filepublicclassFileReceiver{publicstaticvoidmain(String[]args){try(ServerSocketserverSocket=newServerSocket(8080)){System.out.println("Waiting for file...");Socketsocket=serverSocket.accept();System.out.println("Client connected");// Nhận fileBufferedInputStreamin=newBufferedInputStream(socket.getInputStream());FileOutputStreamfileOut=newFileOutputStream("received_file.txt");BufferedOutputStreamout=newBufferedOutputStream(fileOut);byte[]buffer=newbyte[4096];intbytesRead;while((bytesRead=in.read(buffer))!=-1){out.write(buffer,0,bytesRead);}out.flush();out.close();System.out.println("✅ File received successfully!");}catch(IOExceptione){e.printStackTrace();}}}// Client - gửi filepublicclassFileSender{publicstaticvoidmain(String[]args){try(Socketsocket=newSocket("localhost",8080)){System.out.println("Sending file...");// Đọc fileFileInputStreamfileIn=newFileInputStream("file_to_send.txt");BufferedInputStreamin=newBufferedInputStream(fileIn);// Gửi qua socketBufferedOutputStreamout=newBufferedOutputStream(socket.getOutputStream());byte[]buffer=newbyte[4096];intbytesRead;while((bytesRead=in.read(buffer))!=-1){out.write(buffer,0,bytesRead);}out.flush();in.close();System.out.println("✅ File sent successfully!");}catch(IOExceptione){e.printStackTrace();}}}