关于在VC中设计聊天室的疑问,该怎么解决

关于在VC中设计聊天室的疑问
设计思想:
  服务器端:
  1、创建套接字,TCP协议
  2、绑定端口
  3、listen端口
  4、accept链接,将接收到的socket存入数组
  5、循环接受来自各个客户端的消息
  6、将接受到的消息分别发给每一个在线客户端

  客户端
  1、创建套接字
  2、connect服务器
  3、循环发送接受消息

几个问题
  1、客户端创建套接字完毕后直接connect服务器,那客户端的端口是如何确定的?在服务器端是有bind的固定端口接收的,客户端是用哪个端口来接收发送消息的?
  2、我理解中在这个聊天室用accept应该是一个持续的过程,因为随时有可能有一个新的客户端会connect过来,但是接收已经在线的客户端的聊天消息应该也是一个持续循环的过程,这两个循环应该并行的,我设想就是可以开2个线程,一个线程专门用于处理connect消息,连接成功后将对端socket保存,儿另一个线程就是循环接受已有的socket的聊天消息并转发所有在线用户。我在网上查了一些案例,在讲的流程中并未提及这个多线程,那假如是单线程又是如何进行这样的操作?单线程中一旦再次accept等待用户登录,如果没有用户登录那不就死在这里了啊?

------解决方案--------------------
1.通信端口使用1000以上的,一般不会被系统占用,服务端就是监听转发,端口固定下来,客户端主动连接服务端的ip+端口,即可完成通信。

2.多线程是必需的,监听和主动连接就肯定要分开。
------解决方案--------------------
1, 对于TCP,客户端在connect的时候应该指定和服务器一致的端口。客户端在接收的时候也应该是相同的端口。可以用netstat -a查看下
2, 用多线程可以实现,可以参考我写过的一个例子。第二种方法可以用端口复用。
http://blog.****.net/delphiwcdj/archive/2009/10/13/4663804.aspx
欢迎一起讨论:)
------解决方案--------------------
探讨

另外还有个问题:

1、recv是阻塞的吧?我的设想是循环接收每个用户的聊天消息,如果一个用户没有发过来,那如果阻塞的话后面的用户不是都收不到了?

2、如果我收到一个消息后正在发送聊天消息给每个用户,而此时N多客户端发报文过来了,这些消息是否会丢包?