Last active
October 28, 2020 12:54
-
-
Save andraantariksa/acb4b2df0f4a82f3163a5686473366c1 to your computer and use it in GitHub Desktop.
Simple Java socket client
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package io.github.andraantariksa; | |
import java.io.*; | |
import java.net.Socket; | |
import java.net.SocketException; | |
import java.net.UnknownHostException; | |
import java.util.Date; | |
import java.util.Scanner; | |
public class MainClient { | |
public static void main(String[] args) { | |
SocketClient client = new SocketClient("localhost", 3657); | |
client.run(); | |
System.exit(0); | |
} | |
} | |
class ClientReceiverThread extends Thread { | |
InputStream m_input; | |
ClientReceiverThread(InputStream input) { | |
m_input = input; | |
} | |
@Override | |
public void run() { | |
String receivedMessage; | |
do { | |
BufferedReader reader = new BufferedReader(new InputStreamReader(m_input)); | |
try { | |
receivedMessage = reader.readLine(); | |
if (receivedMessage == null) { | |
break; | |
} | |
System.out.println("[SERVER][" + new Date().toString() + "] " + receivedMessage); | |
} catch (SocketException e) { | |
// When socket is closed | |
break; | |
} catch (IOException e) { | |
e.printStackTrace(); | |
break; | |
} | |
} while (!receivedMessage.equals("bye")); | |
} | |
} | |
class ClientSenderThread extends Thread { | |
OutputStream m_output; | |
PrintWriter m_writer; | |
Scanner m_scanner; | |
ClientSenderThread(OutputStream output) { | |
m_output = output; | |
m_writer = new PrintWriter(m_output, true); | |
m_scanner = new Scanner(System.in); | |
} | |
@Override | |
public void run() { | |
String toSendMessage; | |
do { | |
toSendMessage = m_scanner.nextLine(); | |
if (toSendMessage == null) { | |
break; | |
} | |
m_writer.println(toSendMessage); | |
System.out.println("[CLIENT][" + new Date().toString() + "] " + toSendMessage); | |
} while (!toSendMessage.equals("bye")); | |
} | |
} | |
class SocketClient { | |
final String m_hostname; | |
final int m_port; | |
SocketClient(String hostname, int port) { | |
m_hostname = hostname; | |
m_port = port; | |
} | |
void run() { | |
try { | |
System.out.println("Trying to connect to the server socket..."); | |
Socket socket = new Socket(m_hostname, m_port); | |
System.out.println("Connected to the server. You can now type your message"); | |
OutputStream output = socket.getOutputStream(); | |
InputStream input = socket.getInputStream(); | |
// Start the thread | |
ClientSenderThread clientSenderThread = new ClientSenderThread(output); | |
ClientReceiverThread clientReceiverThread = new ClientReceiverThread(input); | |
clientSenderThread.start(); | |
clientReceiverThread.start(); | |
while (true) { | |
if (!clientSenderThread.isAlive() || !clientReceiverThread.isAlive()) { | |
System.out.println("Chat session ended"); | |
break; | |
} | |
} | |
input.close(); | |
output.close(); | |
clientSenderThread.stop(); | |
clientReceiverThread.stop(); | |
socket.close(); | |
} catch (UnknownHostException ex) { | |
System.out.println("Server not found: " + ex.getMessage()); | |
} catch (IOException ex) { | |
System.out.println("I/O error: " + ex.getMessage()); | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package io.github.andraantariksa; | |
import java.io.*; | |
import java.net.ServerSocket; | |
import java.net.Socket; | |
import java.net.SocketException; | |
import java.util.Date; | |
import java.util.Scanner; | |
public class MainServer { | |
public static void main(String[] args) { | |
SocketServer server = new SocketServer(3657); | |
server.run(); | |
System.exit(0); | |
} | |
} | |
class ServerReceiverThread extends Thread { | |
InputStream m_input; | |
ServerReceiverThread(InputStream input) { | |
m_input = input; | |
} | |
@Override | |
public void run() { | |
String receivedMessage; | |
do { | |
BufferedReader reader = new BufferedReader(new InputStreamReader(m_input)); | |
try { | |
receivedMessage = reader.readLine(); | |
if (receivedMessage == null) { | |
break; | |
} | |
System.out.println("[CLIENT][" + new Date().toString() + "] " + receivedMessage); | |
} catch (SocketException e) { | |
// When socket is closed | |
break; | |
} catch (IOException e) { | |
e.printStackTrace(); | |
break; | |
} | |
} while (!receivedMessage.equals("bye")); | |
} | |
} | |
class ServerSenderThread extends Thread { | |
OutputStream m_output; | |
PrintWriter m_writer; | |
Scanner m_scanner; | |
ServerSenderThread(OutputStream output) { | |
m_output = output; | |
m_writer = new PrintWriter(m_output, true); | |
m_scanner = new Scanner(System.in); | |
} | |
@Override | |
public void run() { | |
String toSendMessage; | |
do { | |
toSendMessage = m_scanner.nextLine(); | |
if (toSendMessage == null) { | |
break; | |
} | |
m_writer.println(toSendMessage); | |
System.out.println("[SERVER][" + new Date().toString() + "] " + toSendMessage); | |
} while (!toSendMessage.equals("bye")); | |
} | |
} | |
class SocketServer { | |
private final int m_port; | |
SocketServer(int port) { | |
m_port = port; | |
} | |
void run() { | |
try { | |
System.out.println("Starting up the socket server..."); | |
ServerSocket serverSocket = new ServerSocket(m_port); | |
System.out.println("Server is listening on port " + m_port); | |
System.out.println("Waiting for a client to connect..."); | |
Socket socket = serverSocket.accept(); | |
System.out.println("A client has been connected. You can now type your message"); | |
OutputStream output = socket.getOutputStream(); | |
InputStream input = socket.getInputStream(); | |
// Start the thread | |
ServerSenderThread serverSenderThread = new ServerSenderThread(output); | |
ServerReceiverThread serverReceiverThread = new ServerReceiverThread(input); | |
serverSenderThread.start(); | |
serverReceiverThread.start(); | |
while (true) { | |
if (!serverSenderThread.isAlive() || !serverReceiverThread.isAlive()) { | |
System.out.println("Chat session ended"); | |
break; | |
} | |
} | |
input.close(); | |
output.close(); | |
serverSenderThread.stop(); | |
serverReceiverThread.stop(); | |
socket.close(); | |
} catch (IOException ex) { | |
System.out.println("Server exception: " + ex.getMessage()); | |
ex.printStackTrace(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment