【发布时间】:2012-04-05 17:41:22
【问题描述】:
我有一个服务器-客户端应用程序 [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
}
}
添加的问题:
假设服务器有一个端口。
客户端连接到服务器以获取命令.. 我们称它为 cmdClient,其端口为 11589
然后为该客户端启动一个作业线程,就像代码一样。
然后客户端通过另一个套接字连接到服务器.. dataClient 其端口为 1800
然后当我使用 dataClient 发送文件时.. 服务器在作业方法中接收字节.. !!为什么会这样?
【问题讨论】:
-
服务端只监听单个端口,客户端却开启多个TCP连接?
-
@CodeInChaos 是啊!那应该怎么做呢?
-
您的问题标题听起来像是您在服务器上的三个不同端口上监听,这很奇怪。但只有几个连接并不罕见。
-
可以使用支持多路复用的协议,但这会增加相当大的复杂性。
-
我认为你是对的 .. 我会继续使用我的代码
标签: c# sockets client-server port