c# winform socket一次发送多个文件的问题

limon758 limon758 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我想用 socket一次发送多个文件

本以为一个一个发过去就好了

可是不行

第一个文件发送是正常的

可是第2个文件就发送不过去了

停在这条语句上

//指向远程服务端节点
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("192.168.1.136"), int.Parse(this.textBox5.Text));

需求就是选中一个文件夹,把这个文件夹的所有文件都发送过去

下面贴上发送的代码

private void button2_Click(object sender, System.EventArgs e)
{
//开启文件传输子线程
Thread TempThread=new Thread(new ThreadStart(this.StartSend));
TempThread.Start();
this.button2.Enabled=false;
}



private void StartSend()
{
try
{
//遍历目录
string[] str = new string[1024];
for (int imgCount = 0; imgCount < Directory.GetFiles("d:\\aa").Length; imgCount++)
{
str[imgCount] = Directory.GetFiles("d:\\aa")[imgCount];


//创建一个文件对象
FileInfo EzoneFile = new FileInfo(str[imgCount]);
//打开文件流
FileStream EzoneStream = EzoneFile.OpenRead();
//包的大小
int PacketSize = int.Parse(this.textBox6.Text);
//包的数量
int PacketCount = (int)(EzoneStream.Length / ((long)PacketSize));

Control.CheckForIllegalCrossThreadCalls = false;

this.textBox8.Text = PacketCount.ToString();
this.progressBar1.Maximum = PacketCount;
//最后一个包的大小
int LastDataPacket = (int)(EzoneStream.Length - ((long)(PacketSize * PacketCount)));
this.textBox9.Text = LastDataPacket.ToString();

//MessageBox.Show(str[imgCount]);
//指向远程服务端节点
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("192.168.1.136"), int.Parse(this.textBox5.Text));


//创建套接字
Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//连接到发送端
client.Connect(ipep);

//获得客户端节点对象
IPEndPoint clientep = (IPEndPoint)client.RemoteEndPoint;
//获得客户端的IP地址
//this.textBox7.Text=clientep.Address.ToString();
//发送[文件名]到客户端
CommonModule.EzoneModule.SendVarData(client, System.Text.Encoding.Unicode.GetBytes(EzoneFile.Name));
//发送[包的大小]到客户端
CommonModule.EzoneModule.SendVarData(client, System.Text.Encoding.Unicode.GetBytes(PacketSize.ToString()));
//发送[包的总数量]到客户端
CommonModule.EzoneModule.SendVarData(client, System.Text.Encoding.Unicode.GetBytes(PacketCount.ToString()));
//发送[最后一个包的大小]到客户端
CommonModule.EzoneModule.SendVarData(client, System.Text.Encoding.Unicode.GetBytes(LastDataPacket.ToString()));

//数据包
byte[] data = new byte[PacketSize];
//开始循环发送数据包
for (int i = 0; i < PacketCount; i++)
{
//从文件流读取数据并填充数据包
EzoneStream.Read(data, 0, data.Length);
//发送数据包
CommonModule.EzoneModule.SendVarData(client, data);
//显示发送数据包的个数
this.textBox10.Text = ((int)(i + 1)).ToString();
//进度条值的显示
this.progressBar1.PerformStep();
}

//如果还有多余的数据包,则应该发送完毕!
if (LastDataPacket != 0)
{
data = new byte[LastDataPacket];
EzoneStream.Read(data, 0, data.Length);
CommonModule.EzoneModule.SendVarData(client, data);
this.progressBar1.Value = this.progressBar1.Maximum;
}

//关闭套接字
client.Close();
//server.Close();
//关闭文件流
EzoneStream.Close();
this.button2.Enabled = true;
//MessageBox.Show("文件传输完毕!");
}
}
catch (Exception ee)
{
MessageBox.Show(ee.Message.ToString());
}
}
...全文

相关推荐

C# WinForm MiNi QQ项目

总之,完成【C# WinForm MiNi QQ项目】不仅要求开发者具备扎实的C# WinForm基础知识,还需要熟悉网络编程、多线程、文件操作、数据库操作等多个领域。

爱不绝迹

C#基于WinForm的Socket通讯完整实现:服务端与客户端设计

Socket编程允许程序在网络中进行通信,是一种通过网络传输数据的有效手段。它属于操作系统内核的一部分,主要负责进程间通信(IPC),以及不同主机之间的数据交换。在C#中,Socket类库是通过.NET Framework提供的System.Net.Sockets命名空间进行访问的,可以实现TCP/IP和UDP/IP协议的数据交换。它广泛用于构建客户端-服务器应用程序,如聊天应用、文件共享服务以及远程过程调用等。

DIY飞跃计划

winform实现局域网多人协同画图

主线程负责处理UI更新,而网络通信线程负责接收和发送绘图指令。同时,需要注意线程安全问题,确保在多线程环境下正确地访问共享资源。5. **图片生成与导出**:用户可能需要将当前的画图保存为图片文件。

shawshrank

C#进程传值

这里,我们关注的是如何在Windows Forms(WinForm)环境下,使用C#实现两个独立进程之间的实时数据传递。这个场景通常涉及到多个执行文件(exe),每个文件代表一个独立运行的进程。

tongxingzheng97

C# Socket通信(winform) 异步发送消息,服务端客户端通信,可以发送消息和文件并进行接收

该项目基于C# WinForm实现异步Socket通信,支持服务端与客户端之间的消息和文件传输。通过事件驱动模型处理连接、消息收发及文件传送,具备良好的用户交互界面。核心功能包括异步监听、多客户端接入

编程ID
评论 4
收藏 已收藏
分享
返回顶部
limon758
C# 111,128 成员 642,536 内容