Coder Social home page Coder Social logo

How to read TCP? about async-std HOT 10 OPEN

oilel avatar oilel commented on August 21, 2024
How to read TCP?

from async-std.

Comments (10)

oilel avatar oilel commented on August 21, 2024

Is the written byte slice the response to TCP client?

from async-std.

notgull avatar notgull commented on August 21, 2024

TCP streams implement the Read trait, which can be used to read from the stream.

from async-std.

oilel avatar oilel commented on August 21, 2024

TCP streams implement the Read trait, which can be used to read from the stream.

I sent the 2nd question below the question of how to read.

from async-std.

notgull avatar notgull commented on August 21, 2024

Assuming you have a stream already:

use async_std::prelude::*;
let mut bytes = [0u8; 32];
stream.read(&mut bytes).await?;

Replace read with read_exact if you want to fill up the bytes array rather than read as much as possible in one go. See here for more methods.

from async-std.

oilel avatar oilel commented on August 21, 2024

If I write b"hello world" to incoming TCP stream then use flush method for TCP stream, the browser tells me invalid HTTP response.

from async-std.

oilel avatar oilel commented on August 21, 2024

What's the difference between .read_to_end() and .poll_read()? .poll_read_vectored() and .poll_write_vectored() allows using multiple buffers, what's the use case of multiple buffers? @notgull

from async-std.

oilel avatar oilel commented on August 21, 2024

@notgull My program binded to address 127.0.0.1:1024, I used my browser to connect to this address, the content read from the stream was:
TcpStream { watcher: Async { source: Source { raw: 8, key: 2, state: Mutex { data: [Direction { tick: 0, ticks: None, waker: None, wakers: Slab { len: 0, cap: 0 } }, Direction { tick: 0, ticks: None, waker: None, wakers: Slab { len: 0, cap: 0 } }], poisoned: false, .. } }, io: Some(TcpStream { addr: 127.0.0.1:1024, peer: 127.0.0.1:46679, fd: 8 }) } } TcpStream { watcher: Async { source: Source { raw: 8, key: 2, state: Mutex { data: [Direction { tick: 0, ticks: None, waker: None, wakers: Slab { len: 0, cap: 0 } }, Direction { tick: 0, ticks: None, waker: None, wakers: Slab { len: 0, cap: 0 } }], poisoned: false, .. } }, io: Some(TcpStream { addr: 127.0.0.1:1024, peer: 127.0.0.1:46681, fd: 8 }) } } TcpStream { watcher: Async { source: Source { raw: 8, key: 2, state: Mutex { data: [Direction { tick: 0, ticks: None, waker: None, wakers: Slab { len: 0, cap: 0 } }, Direction { tick: 0, ticks: None, waker: None, wakers: Slab { len: 0, cap: 0 } }], poisoned: false, .. } }, io: Some(TcpStream { addr: 127.0.0.1:1024, peer: 127.0.0.1:46683, fd: 8 }) } }

from async-std.

notgull avatar notgull commented on August 21, 2024

If I write b"hello world" to incoming TCP stream then use flush method for TCP stream, the browser tells me invalid HTTP response.

This is because you're writing raw text instead of a valid HTTP response. You would need to write something like b"GET / HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\n\r\nHello world!". However when it comes to HTTP you should generally use async-h1 or a web framework like tide.

What's the difference between .read_to_end() and .poll_read()? .poll_read_vectored() and .poll_write_vectored() allows using multiple buffers, what's the use case of multiple buffers? @notgull

The main draw of vectored reads and writes is that it allows you to have multiple buffers split across memory for your read operation. An example use case would be in HTTP, if you wanted to read the header to one buffer and the body to another. See this page for more information.

from async-std.

oilel avatar oilel commented on August 21, 2024

This is because you're writing raw text instead of a valid HTTP response.

If I don't write anything at that time, the web browser may tell me socks not connected. Can it tell web browsers to wait for responses (maybe wait for 5 minutes) instead of showing error like socks not connected?

from async-std.

artshell avatar artshell commented on August 21, 2024

@oilel

I have the same problems!

// read and ignored
let mut buffer = [0; 1024];
stream.read(&mut buffer).await;

from async-std.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.