![]() |
1
1
你可以那样做,但我看不到好处。除非每一个连接都被限制在某个地方,否则实际上会导致两倍于I/O操作的开销。 这和把文件写到磁盘上是一样的,仅仅因为你把它分成两个线程并不意味着它会更快,因为磁盘只能一次写入。你可能真的看到 更慢的 响应时间。 |
![]() |
2
5
客户端当然可以多次连接到服务器,而且可能应该连接。 但是,您可以指定相同的服务器端口-不同的 地方的 端口将在服务器端分配,但客户端不需要知道这一点。(想想web服务器- 太多了 所有客户端都将同时连接到端口80。) 当然,也会自动为您分配独立的客户端端口-基本上,连接不应该相互干扰。 |
![]() |
3
3
您需要使用异步客户机和服务器套接字。基本上不用Recieve和Send,而是使用BeginRecieve、BeginSend、BeginConnect和beginacept。这样线程就为您完成了。在工作线程中拥有每个连接不是一个好主意。这样,每个新的请求都会同时处理(异步)。您还可以使用发送文件的前几个字节来存储有关该文件的数据。下面的例子。当然,下面的数字(1,2,3..)是一个字符串文件名,您在上面调用了Bitconverter.GetBytes(string var)。希望这有帮助。maxpfc@gmail.com(skype)
下面是一个可编译的Asyc套接字示例。
|
![]() |
4
1
是的;这就是网络协议通常的工作方式。您不需要在服务器端选择新的端口号:即使您监听固定的端口号,到该端口的连接也保持独立。 例如,www.stackoverflow.com上的web服务器总是监听端口80,但是您和我可以从我们的web浏览器进行连接,而且我们的连接不会混淆。 |
![]() |
5
0
您要么必须在单个套接字上叠加一个协议来标识哪些数据是哪个文件的一部分,要么使用多个套接字来知道每个文件的开始和结束位置。 即使有多个套接字,如果要在没有套接字打开/关闭管理的情况下对新文件重用同一个套接字,也必须有开始/结束标记。 为什么你不能用FTP? |