i have a question about making a P2P chat application.

is it common to create two separate threads for the socket connection and the chat message window associated with it?. example: if i'm chatting with someone should there be two threads associated with it? (one for the actual connection and the other for updating the chat window) ... i really don't see any other way because if they're put on the same thread, and the socket is waiting for incoming data, the window won't respond to anything because it's waiting for data. if this is the case then there must be about 3+ threads running at all times for apps such as AIM ... it gets pretty complex.
i also have additional questions about client connections to the server. say, for instance, i route all user chat messages throught the server (like AIM), should i have 2 socket connections ... 1 for incoming/outgoing server operations (user online, user offline, away, etc.), and the other for incoming/outgoing chat messages?
i have a lot more questions of this nature. has anyone put together or found a site dealing with these theoretical topics?

alandrums - http://alandrums.hypermart.net