Socket与多线程!解决方法

Socket与多线程!
问题1:我要实现群聊。

利用UDP的多播实现,要实现多播是不是要使用D类IP地址,意思我在设置SOCKADDR_IN 这个结构体要将IP地址设置为D类的IP? 如果不是,怎么将他们多个程序加入多播组呢?


问题2:我要实现同时发送多个文件。

法一:利用一个SOCKET,循环发送数据,在每次发送前加上头部说明这个是哪个文件的数据包! 

法二:建立多个SOCKET(每个SOCKET对应一个文件的传输),为每个SOCKET创建一个线程,用来接收文件。但是我怎么动态的创建线程呢,因为我每次创建一个线程就要指定线程函数的名称,我又不知道会有多少个文件会传输过来,所以创建线程就不定啊!  
  另外 当接收完文件后,这个SOCKET需要关闭么? 还是不关闭,等待下次的文件传输!
  并且怎么处理进度条的移动呢,因为是多个文件同时传输,就会有多个进度条,我是不是要为每个文件的传输的进度条都写一个移动进度条的代码? 还是只用一个就好了?

问题3:是关于线程的SLEEP函数的问题。

我举个例子说明我的问题,比如我创建了2个线程A和B,操作系统为每个线程分配100毫秒的时间片,当执行A的时候我调用一个Sleep(10), 问题来了:这是A线程会立即跳转到B线程还是等睡完10毫秒后,然后再将剩下的90秒运行完后才跳转到B线程?


   
我这个程序不是基于服务器和客户端的, 就是一个程序既可以是服务器又可以客户端!


------解决方案--------------------
问题1:我要实现群聊
不用,有一个组播地址就行

问题2:我要实现同时发送多个文件
线程池

问题3:是关于线程的SLEEP函数的问题
得sleep 10,然后加入到cpu轮询的队列里
------解决方案--------------------
问题真多.LZ需要逐个击破
------解决方案--------------------
问题3
SLEEP() 后A线程立即停止,CPU进入B线程或别的进程,比如你玩的某个游戏的进程,
------解决方案--------------------
我记得sleep是先转让CPU,睡醒了才有机会拥有