c# – 为服务器应用程序使用3个端口是明智的吗?
我有一个服务器 – 客户端应用程序[TCP套接字,.NET 4.0] ..
应用程序有关:>执行从客户端接收的命令>接收文件>发送屏幕截图图像 应用程序应该同时执行3个任务 完成后,它工作..我意识到这些应用程序应该使用一个端口的所有任务..像Radmin和netsupport ..等 但我使用了3个端口..一个用于在客户端发送时随时接收命令.一个用于接收文件..如果客户端要求截屏,则为一个 那么为网络应用程序使用3个端口是否可以? .. 我试图在客户端创建3个套接字连接到同一端口上的服务器(例如:9090) private void ClientAccept() { while (true) { Socket client = server.Accept(); Console.WriteLine(client.RemoteEndPoint + " has connected"); NetworkStream stream = new NetworkStream(client); StreamReader reader = new StreamReader(stream); string line = reader.ReadLine(); if (line == "1") //it means its a command socket { thJob = new Thread(Job); thJob.Start(cmdClient); } else if(line=="2") //its a data socket { FileTransfer ft = new FileTransfer(client); } } } private void Job(object o) { Socket s = (Socket)o; StreamReader sr = new StreamReader(new NetworkStream(s)); string cmd = null; while ((cmd = sr.ReadLine()) != null) { //bla bla } } 补充问题: 解决方法
是的,在进行文件传输时使用多个端口是明智的.它需要一个非常高级的协议来使用相同的端口并仍然保持应用程序响应(因为您仍然必须能够在文件传输期间发送命令).
但我不建议您使用三个固定端口.对所有命令使用一个端口,对文件传输使用任意数量的端口. 文件传输看起来像这样: >(CmdPort)客户端 – >服务器嘿我想传输大小为YYYY的文件XXX 这允许您同时传输多个文件.让服务器使用端口0创建一个新的侦听套接字.它告诉操作系统选择一个空闲端口.然后在步骤#2中将端口发回之前使用Socket.LocalEndpoint查找端口. 指定的方法还允许您利用Socket.SendFile,这可能是使用.NET发送文件的最有效和最快捷的方式. (FTP使用相同的方法,bittorrent也是如此.从Web下载文件时,您可能使用了文件管理器.它们采用了更为极端的方法,并通过多个套接字分割文件下载以绕过Web服务器带宽限制.) 更新以回应评论:
您没有在原始问题中指定该信息,这使我假设您一次只传输一个文件. 批量传输将以相同的方式工作,只需更改以便步骤#1发送文件名大小列表,然后在步骤#3中相互发送所有文件. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |