# marselsampe/java-socket-tcp-sample architecture

> Architecture diagram of the GitHub repository marselsampe/java-socket-tcp-sample, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/marselsampe/java-socket-tcp-sample
- Repository: https://github.com/marselsampe/java-socket-tcp-sample

## Overview

This repository is a collection of independent Java TCP socket examples, not one integrated application. Each demonstrates a client/server workflow: connect, exchange a message or serialized payload, and display or process the result. Chat ranges from single-client messaging to multi-client broadcast; other samples retrieve server dates, transfer a file, send a list or custom object, or provide a Swing student-data GUI. The graph groups related examples; unsampled implementation details are not inferred beyond the README’s capability descriptions.

Main entry points: [`Socket_Chat/src/chat/client2/Client.java`](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_Chat/src/chat/client2/Client.java) (Multi-Client Chat), [`Socket_SimpleApp_Client/src/Client1.java`](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_SimpleApp_Client/src/Client1.java) (Student Entry GUI), [`Socket_SimpleApp_Server/src/ChatServerThread.java`](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_SimpleApp_Server/src/ChatServerThread.java) (Client Handler), [`Socket_Date/src/client/Client1.java`](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_Date/src/client/Client1.java) (Date Client 1)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_chat["TCP Chat"]
  node_chatclient1["Basic Chat Client<br/>[Client.java]"]
  node_chatserver1["Basic Chat Server<br/>[Server.java]"]
  node_chatserver2["Single-Client Server<br/>[Server.java]"]
  node_chatserver3["Threaded Server<br/>[Server.java]"]
  node_chatserver3thread["Server Client Thread"]
  node_chatclient2["Multi-Client Chat<br/>[Client.java]"]
  node_chatclientthread["Chat Receive Thread"]
  node_chatserver4["Broadcast Server<br/>[Server.java]"]
  node_chatserver4thread["Server Client Thread"]
end

subgraph group_date["Date Samples"]
  node_dateclient1["Date Client 1<br/>[Client1.java]"]
  node_dateclient2["Date Client 2<br/>[Client2.java]"]
  node_dateserver1["Date Server 1<br/>[Server1.java]"]
  node_dateserver2["Date Server 2<br/>[Server2.java]"]
end

subgraph group_transfer["Payload Transfers"]
  node_fileclient["File Receiver<br/>[Client.java]"]
  node_fileserver["File Sender<br/>[Server.java]"]
  node_listclient["List Receiver<br/>[Client.java]"]
  node_listserver["List Sender<br/>[Server.java]"]
  node_objectclient["Object Receiver<br/>[Client.java]"]
  node_objectserver["Object Sender<br/>[Server.java]"]
  node_studentmodel["Student Data Model<br/>[Mahasiswa.java]"]
end

subgraph group_gui["Swing Application"]
  node_guiclient1["Student Entry GUI<br/>[Client1.java]"]
  node_guiclient2["GUI Client 2<br/>[Client2.java]"]
  node_guiserver["GUI Server<br/>[Server.java]"]
  node_guiserverthread["Client Handler"]
  node_guiservermodel["Server Student Model<br/>[Mahasiswa.java]"]
  node_guiclientmodel["Client Student Model<br/>[Mahasiswa.java]"]
end

node_person(("User"))

node_person -.->|"uses"| node_chatclient1
node_person -.->|"uses"| node_chatclient2
node_chatclient1 -.->|"chat TCP"| node_chatserver1
node_chatclient2 -.->|"chat TCP"| node_chatserver4
node_chatclient2 -->|"starts"| node_chatclientthread
node_chatclientthread -->|"delivers messages"| node_chatclient2
node_chatserver2 -.->|"chat variants"| node_chatserver3
node_chatserver3 -.->|"starts handler"| node_chatserver3thread
node_chatserver4 -.->|"starts handler"| node_chatserver4thread
node_person -.->|"requests date"| node_dateclient1
node_person -.->|"requests date"| node_dateclient2
node_dateclient1 -.->|"TCP exchange"| node_dateserver1
node_dateclient2 -.->|"TCP exchange"| node_dateserver2
node_dateserver1 -.->|"returns date"| node_dateclient1
node_dateserver2 -.->|"returns date"| node_dateclient2
node_person -.->|"receives file"| node_fileclient
node_fileserver -->|"sends file"| node_fileclient
node_person -.->|"receives list"| node_listclient
node_listserver -.->|"sends list"| node_listclient
node_person -.->|"views object"| node_objectclient
node_objectserver -->|"sends object"| node_objectclient
node_objectserver -->|"creates"| node_studentmodel
node_objectclient -->|"deserializes as"| node_studentmodel
node_person -.->|"enters student data"| node_guiclient1
node_guiclient1 -.->|"submits data"| node_guiserver
node_guiserver -.->|"starts handler"| node_guiserverthread
node_guiserverthread -.->|"updates records"| node_guiserver
node_guiclient1 -->|"creates"| node_guiclientmodel
node_guiserverthread -.->|"uses"| node_guiservermodel
node_person -.->|"uses"| node_guiclient2

click node_chatclient1 "https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_Chat/src/chat/client/Client.java"
click node_chatserver1 "https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_Chat/src/chat/server1/Server.java"
click node_chatserver2 "https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_Chat/src/chat/server2/Server.java"
click node_chatserver3 "https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_Chat/src/chat/server3/Server.java"
click node_chatserver3thread "https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_Chat/src/chat/server3/ChatServerThread.java"
click node_chatclient2 "https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_Chat/src/chat/client2/Client.java"
click node_chatclientthread "https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_Chat/src/chat/client2/ChatClientThread.java"
click node_chatserver4 "https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_Chat/src/chat/server4/Server.java"
click node_chatserver4thread "https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_Chat/src/chat/server4/ChatServerThread.java"
click node_dateclient1 "https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_Date/src/client/Client1.java"
click node_dateclient2 "https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_Date/src/client/Client2.java"
click node_dateserver1 "https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_Date/src/server/Server1.java"
click node_dateserver2 "https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_Date/src/server/Server2.java"
click node_fileclient "https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_SendFile/src/client/Client.java"
click node_fileserver "https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_SendFile/src/server/Server.java"
click node_listclient "https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_SendList/src/client/Client.java"
click node_listserver "https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_SendList/src/server/Server.java"
click node_objectclient "https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_SendObject/src/client/Client.java"
click node_objectserver "https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_SendObject/src/server/Server.java"
click node_studentmodel "https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_SendObject/src/model/Mahasiswa.java"
click node_guiclient1 "https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_SimpleApp_Client/src/Client1.java"
click node_guiclient2 "https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_SimpleApp_Client/src/Client2.java"
click node_guiserver "https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_SimpleApp_Server/src/Server.java"
click node_guiserverthread "https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_SimpleApp_Server/src/ChatServerThread.java"
click node_guiservermodel "https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_SimpleApp_Server/src/Mahasiswa.java"
click node_guiclientmodel "https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_SimpleApp_Client/src/Mahasiswa.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_chatclient1,node_chatserver1,node_chatserver2,node_chatserver3,node_chatserver3thread,node_chatclient2,node_chatclientthread,node_chatserver4,node_chatserver4thread,node_person toneBlue
class node_dateclient1,node_dateclient2,node_dateserver1,node_dateserver2 toneAmber
class node_fileclient,node_fileserver,node_listclient,node_listserver,node_objectclient,node_objectserver,node_studentmodel toneMint
class node_guiclient1,node_guiclient2,node_guiserver,node_guiserverthread,node_guiservermodel,node_guiclientmodel toneRose
```

## Components

### TCP Chat

- [Basic Chat Client](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_Chat/src/chat/client/Client.java): `Socket_Chat/src/chat/client/Client.java`
- [Basic Chat Server](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_Chat/src/chat/server1/Server.java): `Socket_Chat/src/chat/server1/Server.java`
- [Single-Client Server](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_Chat/src/chat/server2/Server.java): `Socket_Chat/src/chat/server2/Server.java`
- [Threaded Server](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_Chat/src/chat/server3/Server.java): `Socket_Chat/src/chat/server3/Server.java`
- [Server Client Thread](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_Chat/src/chat/server3/ChatServerThread.java): `Socket_Chat/src/chat/server3/ChatServerThread.java`
- [Multi-Client Chat](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_Chat/src/chat/client2/Client.java): `Socket_Chat/src/chat/client2/Client.java`
- [Chat Receive Thread](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_Chat/src/chat/client2/ChatClientThread.java): `Socket_Chat/src/chat/client2/ChatClientThread.java`
- [Broadcast Server](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_Chat/src/chat/server4/Server.java): `Socket_Chat/src/chat/server4/Server.java`
- [Server Client Thread](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_Chat/src/chat/server4/ChatServerThread.java): `Socket_Chat/src/chat/server4/ChatServerThread.java`

### Date Samples

- [Date Client 1](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_Date/src/client/Client1.java): `Socket_Date/src/client/Client1.java`
- [Date Client 2](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_Date/src/client/Client2.java): `Socket_Date/src/client/Client2.java`
- [Date Server 1](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_Date/src/server/Server1.java): `Socket_Date/src/server/Server1.java`
- [Date Server 2](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_Date/src/server/Server2.java): `Socket_Date/src/server/Server2.java`

### Payload Transfers

- [File Receiver](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_SendFile/src/client/Client.java): `Socket_SendFile/src/client/Client.java`
- [File Sender](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_SendFile/src/server/Server.java): `Socket_SendFile/src/server/Server.java`
- [List Receiver](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_SendList/src/client/Client.java): `Socket_SendList/src/client/Client.java`
- [List Sender](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_SendList/src/server/Server.java): `Socket_SendList/src/server/Server.java`
- [Object Receiver](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_SendObject/src/client/Client.java): `Socket_SendObject/src/client/Client.java`
- [Object Sender](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_SendObject/src/server/Server.java): `Socket_SendObject/src/server/Server.java`
- [Student Data Model](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_SendObject/src/model/Mahasiswa.java): `Socket_SendObject/src/model/Mahasiswa.java`

### Swing Application

- [Student Entry GUI](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_SimpleApp_Client/src/Client1.java): `Socket_SimpleApp_Client/src/Client1.java`
- [GUI Client 2](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_SimpleApp_Client/src/Client2.java): `Socket_SimpleApp_Client/src/Client2.java`
- [GUI Server](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_SimpleApp_Server/src/Server.java): `Socket_SimpleApp_Server/src/Server.java`
- [Client Handler](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_SimpleApp_Server/src/ChatServerThread.java): `Socket_SimpleApp_Server/src/ChatServerThread.java`
- [Server Student Model](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_SimpleApp_Server/src/Mahasiswa.java): `Socket_SimpleApp_Server/src/Mahasiswa.java`
- [Client Student Model](https://github.com/marselsampe/java-socket-tcp-sample/blob/master/Socket_SimpleApp_Client/src/Mahasiswa.java): `Socket_SimpleApp_Client/src/Mahasiswa.java`

### Other components

- **User**

## Connections

- User → Basic Chat Client: uses (evidence: `README.md`)
- User → Multi-Client Chat: uses (evidence: `README.md`)
- Basic Chat Client → Basic Chat Server: chat TCP (evidence: `README.md`)
- Multi-Client Chat → Broadcast Server: chat TCP (evidence: `Socket_Chat/src/chat/client2/Client.java`)
- Multi-Client Chat → Chat Receive Thread: starts (evidence: `Socket_Chat/src/chat/client2/Client.java`)
- Chat Receive Thread → Multi-Client Chat: delivers messages (evidence: `Socket_Chat/src/chat/client2/ChatClientThread.java`)
- Single-Client Server → Threaded Server: chat variants (evidence: `README.md`)
- Threaded Server → Server Client Thread: starts handler
- Broadcast Server → Server Client Thread: starts handler
- User → Date Client 1: requests date (evidence: `README.md`)
- User → Date Client 2: requests date (evidence: `README.md`)
- Date Client 1 → Date Server 1: TCP exchange (evidence: `README.md`)
- Date Client 2 → Date Server 2: TCP exchange (evidence: `Socket_Date/src/client/Client2.java`)
- Date Server 1 → Date Client 1: returns date (evidence: `README.md`)
- Date Server 2 → Date Client 2: returns date (evidence: `README.md`)
- User → File Receiver: receives file (evidence: `README.md`)
- File Sender → File Receiver: sends file (evidence: `Socket_SendFile/src/server/Server.java`)
- User → List Receiver: receives list (evidence: `README.md`)
- List Sender → List Receiver: sends list (evidence: `README.md`)
- User → Object Receiver: views object (evidence: `README.md`)
- Object Sender → Object Receiver: sends object (evidence: `Socket_SendObject/src/server/Server.java`)
- Object Sender → Student Data Model: creates (evidence: `Socket_SendObject/src/server/Server.java`)
- Object Receiver → Student Data Model: deserializes as (evidence: `Socket_SendObject/src/client/Client.java`)
- User → Student Entry GUI: enters student data (evidence: `README.md`)
- Student Entry GUI → GUI Server: submits data (evidence: `README.md`)
- GUI Server → Client Handler: starts handler
- Client Handler → GUI Server: updates records
- Student Entry GUI → Client Student Model: creates (evidence: `Socket_SimpleApp_Client/src/Client1.java`)
- Client Handler → Server Student Model: uses
- User → GUI Client 2: uses (evidence: `README.md`)
