Working with Networking
1. Using URL and URI Classes
| Class | Use |
|---|---|
URI | Parse/manipulate identifier (preferred) |
URL | Open connection to resource |
| Convert | uri.toURL() / url.toURI() |
| Components | getScheme/getHost/getPort/getPath/getQuery |
2. Making HTTP Requests with HttpClient JAVA 11+
Example: Sync GET
HttpClient client = HttpClient.newBuilder()
.version(HttpClient.Version.HTTP_2)
.connectTimeout(Duration.ofSeconds(10))
.followRedirects(HttpClient.Redirect.NORMAL)
.build();
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/users"))
.header("Accept", "application/json")
.timeout(Duration.ofSeconds(5))
.GET()
.build();
HttpResponse<String> res = client.send(req, BodyHandlers.ofString());
System.out.println(res.statusCode() + ": " + res.body());
| Class | Purpose |
|---|---|
HttpClient | Reusable, thread-safe |
HttpRequest | Immutable request |
HttpResponse | Generic over body type |
BodyHandlers | String, byte[], file, stream, discard |
3. Sending GET Requests
| Step | Detail |
|---|---|
| Default method | GET (just call .GET()) |
| Query params | Append manually to URI |
| Headers | .header(k,v) / .headers(k1,v1,k2,v2) |
4. Sending POST Requests
Example: POST JSON
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/users"))
.header("Content-Type", "application/json")
.POST(BodyPublishers.ofString("{\"name\":\"Alice\"}"))
.build();
| BodyPublisher | Source |
|---|---|
ofString(s) | String body |
ofByteArray(b) | Bytes |
ofFile(p) | File |
ofInputStream(supplier) | Stream |
noBody() | Empty |
5. Handling HTTP Responses
| Method | Returns |
|---|---|
statusCode() | int |
body() | Generic T |
headers() | HttpHeaders |
uri() | Final URI (after redirects) |
version() | HTTP/1.1 or HTTP/2 |
6. Making Async HTTP Requests
Example: Async
CompletableFuture<String> future = client
.sendAsync(req, BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.exceptionally(ex -> "ERROR: " + ex.getMessage());
| Method | Returns |
|---|---|
sendAsync(req, handler) | CompletableFuture<HttpResponse<T>> |
| Composition | thenApply / thenCompose / thenAccept |
7. Setting Request Headers
| Method | Detail |
|---|---|
.header(name, value) | Add header |
.setHeader(name, value) | Replace |
.headers(k1,v1,k2,v2,...) | Bulk add |
| Restricted headers | Connection, Content-Length, Host, etc. set by client |
8. Working with Sockets
| Class | Use |
|---|---|
Socket | TCP client |
ServerSocket | TCP server (accept) |
DatagramSocket | UDP send/receive |
| Streams | getInputStream / getOutputStream |
9. Implementing TCP Client/Server
Example: Echo server
try (ServerSocket server = new ServerSocket(8080)) {
while (true) {
try (Socket s = server.accept();
var in = new BufferedReader(new InputStreamReader(s.getInputStream()));
var out = new PrintWriter(s.getOutputStream(), true)) {
String line;
while ((line = in.readLine()) != null) out.println(line);
}
}
}
| Step | Detail |
|---|---|
| Server | new ServerSocket(port) → accept() |
| Client | new Socket(host, port) |
| Concurrency | Thread per connection or virtual threads |
10. Implementing UDP Communication
| Step | Detail |
|---|---|
| Create | new DatagramSocket(port) |
| Send | send(DatagramPacket) |
| Receive | receive(DatagramPacket) (blocks) |
| Note | No connection guarantees, best-effort |
11. Handling Network Errors
| Exception | Cause |
|---|---|
UnknownHostException | DNS failure |
ConnectException | Refused connection |
SocketTimeoutException | Read/connect timeout |
HttpTimeoutException | HttpClient timeout |
12. Setting Timeouts
| Setting | Method |
|---|---|
| Connect timeout | HttpClient.Builder.connectTimeout(d) |
| Request timeout | HttpRequest.Builder.timeout(d) |
| Socket SO_TIMEOUT | socket.setSoTimeout(ms) |
13. Working with WebSockets
Example: WebSocket client
WebSocket ws = HttpClient.newHttpClient().newWebSocketBuilder()
.buildAsync(URI.create("wss://example.com/socket"), new WebSocket.Listener() {
public CompletionStage<?> onText(WebSocket ws, CharSequence data, boolean last) {
System.out.println("Got: " + data);
return null;
}
})
.join();
ws.sendText("Hello", true);
| API | Detail |
|---|---|
| Builder | HttpClient.newWebSocketBuilder() |
| Listener callbacks | onOpen/onText/onBinary/onClose/onError |
| Send | sendText/sendBinary/sendPing/sendClose |