如何在c#中并行地在客户端和服务器之间发送多个文件。我已经尝试发送单个文件,代码如下所示。
还请解释在不使用套接字发送文件(如下所示)和使用套接字发送文件之间的区别
服务器端
TcpListener filelistener = new TcpListener(IPAddress.Parse(GetIP()), 8085);
MessageBox.Show("server started");
filelistener.Start();
TcpClient client = filelistener.AcceptTcpClient();
Message("Client connection accepted from :" + client.Client.RemoteEndPoint + ".");
byte[] buffer = new byte[1500];
int bytesread = 1;
StreamWriter writer = new StreamWriter("C:\\Users\\ab\\Desktop\\abc.txt");
while (bytesread > 0)
{
bytesread = client.GetStream().Read(buffer, 0, buffer.Length);
if (bytesread == 0)
break;
writer.BaseStream.Write(buffer, 0, buffer.Length);
Message(bytesread + " Received. ");
}
writer.Close();
客户端
try
{
StreamReader sr = new StreamReader(textBox1.Text);
TcpClient tcpClient = new TcpClient();
tcpClient.Connect(new IPEndPoint(IPAddress.Parse(GetIP()), 8085));
byte[] buffer = new byte[1500];
long bytesSent = 0;
while (bytesSent < sr.BaseStream.Length)
{
int bytesRead = sr.BaseStream.Read(buffer, 0, 1500);
tcpClient.GetStream().Write(buffer, 0, bytesRead);
Message(bytesRead + " bytes sent.");
bytesSent += bytesRead;
}
tcpClient.Close();
MessageBox.Show("finished");
Console.ReadLine();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
答案 0 :(得分:1)
TCPClient和TCPListener都在内部使用套接字,只是提供更高级别的抽象。换句话说,你仍在使用套接字,而不是直接使用套接字。
为了并行发送多个文件,您需要服务器能够接受多个连接。有几种方法可以实现这一点,但总体思路是一样的:
在客户端上,您可以启动一些TCPClient对象,每个对象用于您要发送的每个文件,并将数据发送给您的侦听器。
您必须弄清楚数据传输的后勤(协议)。当您获得在侦听器端接收的每个文件的传入数据传输时,您必须确定每个文件代表什么以及它来自何处。这里的细节非常主观,并不适合StackOverflow Q&amp; A。