mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
vlib/net: add buffered IO, x.net -> net (#6754)
This commit is contained in:
21
examples/buf_reader.v
Normal file
21
examples/buf_reader.v
Normal file
@@ -0,0 +1,21 @@
|
||||
// Simple raw HTTP head request
|
||||
import net
|
||||
import time
|
||||
import io
|
||||
|
||||
// Make a new connection
|
||||
mut conn := net.dial_tcp('google.com:80')?
|
||||
// Simple http HEAD request for a file
|
||||
conn.write_str('GET /index.html HTTP/1.0\r\n\r\n')?
|
||||
// Make sure to set a timeout so we can wait for a response!
|
||||
conn.set_read_timeout(10 * time.second)
|
||||
// Wrap in a buffered reader
|
||||
mut r := io.new_buffered_reader(reader: io.make_reader(conn))
|
||||
for {
|
||||
l := r.read_line() or {
|
||||
break
|
||||
}
|
||||
println('$l')
|
||||
// Make it nice and obvious that we are doing this line by line
|
||||
time.sleep_ms(10)
|
||||
}
|
5
examples/net_peer_ip.v
Normal file
5
examples/net_peer_ip.v
Normal file
@@ -0,0 +1,5 @@
|
||||
import net
|
||||
|
||||
conn := net.dial_tcp('google.com:80')?
|
||||
peer_addr := conn.peer_addr()?
|
||||
println('$peer_addr')
|
@@ -1,14 +1,16 @@
|
||||
// Simple raw HTTP head request
|
||||
import x.net
|
||||
import net
|
||||
import time
|
||||
import io
|
||||
|
||||
// Make a new connection
|
||||
mut conn := net.dial_tcp('google.com:80')?
|
||||
defer { conn.close() }
|
||||
// Simple http HEAD request for a file
|
||||
conn.write_string('HEAD /index.html HTTP/1.0\r\n\r\n')?
|
||||
conn.write_str('HEAD /index.html HTTP/1.0\r\n\r\n')?
|
||||
// Make sure to set a timeout so we can wait for a response!
|
||||
conn.set_read_timeout(10 * time.second)
|
||||
conn.set_read_timeout(net.infinite_timeout)
|
||||
// Read all the data that is waiting
|
||||
result := conn.read()?
|
||||
result := io.read_all(conn)?
|
||||
// Cast to string and print result
|
||||
println(result.bytestr())
|
||||
println(result.bytestr())
|
||||
|
23
examples/net_t.v
Normal file
23
examples/net_t.v
Normal file
@@ -0,0 +1,23 @@
|
||||
import net.http
|
||||
import sync
|
||||
import time
|
||||
|
||||
fn send_request(mut wg sync.WaitGroup) ?string {
|
||||
start := time.ticks()
|
||||
data := http.get('https://google.com')?
|
||||
finish := time.ticks()
|
||||
println('Finish getting time ${finish - start} ms')
|
||||
wg.done()
|
||||
return data.text
|
||||
}
|
||||
|
||||
|
||||
|
||||
fn main() {
|
||||
mut wg := sync.new_waitgroup()
|
||||
for i := 0; i < 50; i++ {
|
||||
wg.add(1)
|
||||
go send_request(mut wg)
|
||||
}
|
||||
wg.wait()
|
||||
}
|
@@ -110,7 +110,7 @@ fn (image Image) save_as_ppm(file_name string) {
|
||||
c_r := to_int(unsafe{image.data[i]}.x)
|
||||
c_g := to_int(unsafe{image.data[i]}.y)
|
||||
c_b := to_int(unsafe{image.data[i]}.z)
|
||||
f_out.write('$c_r $c_g $c_b ')
|
||||
f_out.write_str('$c_r $c_g $c_b ')
|
||||
}
|
||||
f_out.close()
|
||||
}
|
||||
|
@@ -1,45 +0,0 @@
|
||||
import net
|
||||
|
||||
// This file shows how a basic TCP echo server can be implemented using
|
||||
// the `net` module. You can connect to the server by using netcat
|
||||
// or telnet, in separate shells, for example:
|
||||
// `nc 127.0.0.1 12345`
|
||||
// `telnet 127.0.0.1 12345`
|
||||
fn handle_connection(con net.Socket) {
|
||||
peer_ip := con.peer_ip() or {
|
||||
'0.0.0.0'
|
||||
}
|
||||
eprintln('${peer_ip:16} | new client connected')
|
||||
defer {
|
||||
eprintln('${peer_ip:16} | closing connection...')
|
||||
con.close() or { }
|
||||
}
|
||||
con.send_string("Welcome to V's TCP Echo server.\n") or {
|
||||
return
|
||||
}
|
||||
for {
|
||||
line := con.read_line()
|
||||
if line.len == 0 {
|
||||
return
|
||||
}
|
||||
eprintln('${peer_ip:16} | received line: ' + line.trim_space())
|
||||
con.send_string(line) or {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
server_port := 12345
|
||||
eprintln('Starting an echo server, listening on port: $server_port')
|
||||
server := net.listen(server_port) or {
|
||||
panic(err)
|
||||
}
|
||||
for {
|
||||
con := server.accept() or {
|
||||
server.close() or { }
|
||||
panic(err)
|
||||
}
|
||||
go handle_connection(con)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user