gpt4 book ai didi

C#套接字发送文件

转载 作者:行者123 更新时间:2023-11-30 21:56:28 24 4
gpt4 key购买 nike

我正在尝试使用 SendFile 方法 https://msdn.microsoft.com/en-us/library/sx0a40c2(v=vs.110).aspx

 TcpClient client;
private void Form1_Load(object sender, EventArgs e)
{
client = new TcpClient();
client.Connect("10.0.0.1", 10);

string fileName = @"C:\Users\itapi\Desktop\da.jpg";
Console.WriteLine("Sending {0} to the host.", fileName);
client.Client.SendFile(fileName);
}

服务器代码:

    TcpListener listener;
TcpClient cl;
private void Form1_Load(object sender, EventArgs e)
{
listener = new TcpListener(IPAddress.Any, 10);
listener.Start();
cl = listener.AcceptTcpClient();




}

我的问题是:我应该如何在另一端获取文件?我不想只使用网络流纯套接字。任何帮助将不胜感激

最佳答案

基本方法是:

  • 打开连接
  • 从连接读取
  • 写入输出流(内存/文件/任何)

最简单的方法是使用 NetworkStream

I dont want to use networkstream only pure socket

让我们再看一下 Stream.CopyTo 的内部结构:

private void InternalCopyTo(Stream destination, int bufferSize)
{
int num;
byte[] buffer = new byte[bufferSize];
while ((num = this.Read(buffer, 0, buffer.Length)) != 0)
{
destination.Write(buffer, 0, num);
}
}

NetworkStream.Write:

public override void Write(byte[] buffer, int offset, int size)
{
// Insert Lots and Lots of checks and safety's here:

streamSocket.Send(buffer, offset, size, SocketFlags.None);
}

另请注意,NetworkStream 负责正确的连接处理、正确的连接关闭等。

简而言之,您可能不想使用 NetworkStream 的原因只有一个:我想完全异步地执行此操作,因为 CopyTo 实现是同步的。如果您使用的是 async/await,那么这甚至是值得商榷的。这适用于服务器环境中的高性能(例如大量连接)。

如果是这种情况,您可能希望从此处的示例代码开始:https://msdn.microsoft.com/en-us/library/system.net.sockets.socketasynceventargs.aspx .

关于C#套接字发送文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31500034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com