Is Multi-threading necessary?

I have some questions about networking. This isn't specific to any particular socket api, just theoretical. To create a 2-way chat system each client must be able to send and receive data. Ideally, they'd always be waiting for data. When the data comes it'll get output to the screen. Also ideally, they'd always be able to send data. So while data is being received it is also being sent.

Is it possible to implement this without multi-threading? I'm thinking: