1package main
2
3import "core:fmt"
4import "core:net"
5import "core:os"
6
7tcp_echo_client :: proc(ip: string, port: int) {
8 local_addr, ok := net.parse_ip4_address(ip)
9 if !ok {
10 fmt.println("Failed to parse IP address")
11 return
12 }
13 sock, err := net.dial_tcp_from_address_and_port(local_addr, port)
14 if err != nil {
15 fmt.println("Failed to connect to server")
16 return
17 }
18 buffer: [256]u8
19 for {
20 n, err_read := os.read(os.stdin, buffer[:])
21 if err_read != nil {
22 fmt.println("Failed to read data")
23 break
24 }
25 if n == 0 || (n == 1 && buffer[0] == '\n') {
26 break
27 }
28 data := buffer[:n]
29 bytes_sent, err_send := net.send_tcp(sock, data)
30 if err_send != nil {
31 fmt.println("Failed to send data")
32 break
33 }
34 sent := data[:bytes_sent]
35 fmt.printfln("Client sent [ %d bytes ]: %s", len(sent), sent)
36 bytes_recv, err_recv := net.recv_tcp(sock, buffer[:])
37 if err_recv != nil {
38 fmt.println("Failed to receive data")
39 break
40 }
41 received := buffer[:bytes_recv]
42 fmt.printfln("Client received [ %d bytes ]: %s", len(received), received)
43 }
44 net.close(sock)
45}
46
47main :: proc() {
48 tcp_echo_client("127.0.0.1", 8080)
49}