社区
C#
帖子详情
大热天,跪谢,急救:C# Scoket文件传输的问题
jasonlee0927
2010-11-15 11:18:36
我现在要做一个文件同步的window服务程序,就是有一个中央服务器A,还有其他几个子服务器B、C。然后B、C服务器每天定时将B、C服务器下指定目录下变动过的文件上传到中央服务器A的指定目录下。之前没做过Scoket方面的,还望各位帮下小弟,多谢了
...全文
322
21
打赏
收藏
大热天,跪谢,急救:C# Scoket文件传输的问题
我现在要做一个文件同步的window服务程序,就是有一个中央服务器A,还有其他几个子服务器B、C。然后B、C服务器每天定时将B、C服务器下指定目录下变动过的文件上传到中央服务器A的指定目录下。之前没做过Scoket方面的,还望各位帮下小弟,多谢了
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lw2906
2011-06-24
打赏
举报
回复
[Quote=引用 20 楼 luozhongxian001 的回复:]
myMedia是什么,在哪定义的?
arrbyte 在哪定义的?
comon1981
2010-11-16
打赏
举报
回复
Mark下,待高人解答,说不准啥时候数据上报的时候就用上了^-^
phil999
2010-11-16
打赏
举报
回复
[Quote=引用 14 楼 cdglynn 的回复:]
Socket 文件传输如果你相信你可以制定出比FTP更好,更能节省开发时间,更高效的协议和代码来你就继续研究把.
[/Quote]
研究
机器人
2010-11-16
打赏
举报
回复
@_@ 能用Remoting,我就不想用Socket。。。
其实也不用Remoting,如果是在局域网,先用net use创建网络映射,再用XCopy。。。
只不过判断是否变动,需要点程序。
luozhongxian001
2010-11-16
打赏
举报
回复
这我自己运行成功的一段代码,你拿去看看吧!我是用TCP协议做的,不过我觉得你这个系统用udp可能更好些
发送端
string startPath1 = Application.StartupPath;
string[] files = Directory.GetFiles(startPath1);
for (int i = 0; i < files.Length; i++)
{
string filefullname = Path.GetFileName(files[i]);
string suffix = Path.GetExtension(files[i]);
if (suffix == ".raw")
{
try
{
//创建连接,连接到服务器的IP,端口
TcpClient client = new TcpClient();
client.Connect(System.Net.IPAddress.Parse("166.111.65.98"), 8880);
FileInfo EzoneFile = new FileInfo(files[i]);
myMedia.FileName = EzoneFile.Name;
myMedia.FileType = System.IO.Path.GetExtension(files[i]);
FileStream fs = new FileStream(filefullname, FileMode.Open);
myMedia.LoadFileData(fs);
NetworkStream clientStream = client.GetStream();//创建接收用的Stream
MemoryStream myFile = new MemoryStream();//缓冲区
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(myFile, myMedia);
arrbyte = myFile.ToArray();
clientStream.Write(arrbyte, 0, arrbyte.Length);
// Console.WriteLine(myFile);
//clientStream.ReadTimeout=10;
myFile.Close();
client.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
接收端服务器端
this.button1.Enabled = false;
//新建监听
TcpListener listener = new TcpListener(IPAddress.Parse("166.111.65.98"), 8880);
listener.Stop();
//开始监听
listener.Start();
while (true)
{
System.DateTime currentTime = System.DateTime.Now,currentTime1,currentTime2,currentTime3;
const int bufferSize = 1024 * 1024;
TcpClient client = listener.AcceptTcpClient();
//接收客户端传过来的数据
NetworkStream clientStream = client.GetStream();
currentTime1 = System.DateTime.Now;
Console.WriteLine(" 获取网络流的时间");
Console.WriteLine(currentTime1-currentTime) ;
byte[] responseBuffer = new byte[bufferSize];
//FileStream fs = new FileStream();
MemoryStream memStream = new MemoryStream();
int CurrByte = 0;
do
{
System.DateTime T1 = System.DateTime.Now;
//读取网络流的buffer大小的数据,存入缓存,返回读取的数据
CurrByte = clientStream.Read(responseBuffer, 0, bufferSize);
//把缓存中的数据块写入流;
memStream.Write(responseBuffer, 0, CurrByte);
System.DateTime T2 = System.DateTime.Now;
Console.WriteLine(" 获取网络流的时间");
Console.WriteLine(T2 -T1);
} while (CurrByte > 0);
currentTime2 = System.DateTime.Now;
Console.WriteLine(" 读取缓存中的数据时间");
Console.WriteLine(currentTime2 - currentTime1);
BinaryFormatter formatter = new BinaryFormatter();
memStream.Seek(0, SeekOrigin.Begin);
newFile = (SerializeFile)formatter.Deserialize(memStream);
currentTime3 = System.DateTime.Now;
Console.WriteLine(" 反序列化的时间");
Console.WriteLine(currentTime3 - currentTime2);
//自定义存放目录 newFile.FileName 存放在debug下面
FileStream fs = new FileStream(newFile.FileName, FileMode.OpenOrCreate);
BinaryWriter w = new BinaryWriter(fs);
w.Write(newFile.FileData);
fs.Close();
memStream.Close();
cdglynn
2010-11-16
打赏
举报
回复
Socket 文件传输如果你相信你可以制定出比FTP更好,更能节省开发时间,更高效的协议和代码来你就继续研究把.
deyygywxf
2010-11-16
打赏
举报
回复
1. 对于B、C而言,需要主动上传文件,而不是等A来要。
2. 保存最后一次上传时的统计信息,例如文件的最后修改时间。然后扫描相应目录下的文件,与统计信息对比,的只需要上传哪些文件。
3. 设计通信协议,至少实现:
a. 其信令为: 传送一个文件的一个数据块(比如说32K内容),并且包括文件名称、目标路径、总长度等信息。将这样的信息打包为一个xml串(文字中的xml特殊字符需要转义,而二进制信息需要Base64编码)。
b. 按照数据块顺序上传,既前一个块传完才传下一块。
jasonlee0927
2010-11-16
打赏
举报
回复
[Quote=引用 10 楼 lonyjianhui 的回复:]
技术要点:
1.异步发送与接收;
2.TCP(P2P):有序性;UDP:速度快,整包;
3.自定义协议;
4.分包发送;
5.粘包与丢包;
6.断点续传;
7.包大小决定;
...........
[/Quote]
我想涉及到的要点没有你要的那么全面,上传只要实现异步发送与接收、TCP/IP、断点续传,就基本上可以了,速度可以不要求那么高
jasonlee0927
2010-11-16
打赏
举报
回复
[Quote=引用 13 楼 huwen7565833 的回复:]
这里有一个Socket文件传输的例子
http://download.csdn.net/source/2474322
定时可以自己再加。
[/Quote]
请问用FTP怎样做到监视本地文件的变动,并且定时上传到远程服务器呢?谢谢
jasonlee0927
2010-11-16
打赏
举报
回复
[Quote=引用 3 楼 sp1234 的回复:]
1. 对于B、C而言,需要主动上传文件,而不是等A来要。
2. 保存最后一次上传时的统计信息,例如文件的最后修改时间。然后扫描相应目录下的文件,与统计信息对比,的只需要上传哪些文件。
3. 设计通信协议,至少实现:
a. 其信令为: 传送一个文件的一个数据块(比如说32K内容),并且包括文件名称、目标路径、总长度等信息。将这样的信息打包为一个xml串(文字中的xml特殊字符需要转义,而二……
[/Quote]
我要实现的没有这么复杂,分支服务器端就是涉及到监视本地指定文件夹下的文加变动,然后主动将变动的文件通过Scoket上传到中央服务器上,我知道监视本地文件可以用FileWatch实现,主要是用Scoket实现文件定时上传;
huwen7565833
2010-11-16
打赏
举报
回复
这里有一个Socket文件传输的例子
http://download.csdn.net/source/2474322
定时可以自己再加。
kk_lb
2010-11-16
打赏
举报
回复
为什么不用FTP处理?以前我做上传到服务器都是用FTP上传文件的。
fanbingyuan
2010-11-16
打赏
举报
回复
[Quote=引用 2 楼 comon1981 的回复:]
Mark下,待高人解答,说不准啥时候数据上报的时候就用上了^-^
[/Quote] 呵呵
lonyjianhui
2010-11-16
打赏
举报
回复
技术要点:
1.异步发送与接收;
2.TCP(P2P):有序性;UDP:速度快,整包;
3.自定义协议;
4.分包发送;
5.粘包与丢包;
6.断点续传;
7.包大小决定;
...........
烈火蜓蜻
2010-11-16
打赏
举报
回复
直接用FTP服务来搞就很简单了
hanzhehanzhe
2010-11-16
打赏
举报
回复
祖国上下,一片大冷天
louti
2010-11-16
打赏
举报
回复
mark 你在哪?还大热天?
ttyyadd
2010-11-16
打赏
举报
回复
服务器A在新线程中监听,收到连接起动新线程来接收数据,接收完毕退出该线程。子服务器需要主动去连接服务器A传输数据。
以专业开发人员为伍
2010-11-16
打赏
举报
回复
其实依据网络不同以及习惯不同,在选择tcp还是udp、数据块大小、xml还是简单文本(比如只是用换行回车分割)、长连接还是短连接等方面有所不同,其结果是传送速度可能有20k、10M之差。这些是细节。
同时,设计程序时要一并考虑到显示传送进度条的要求。
你先实现基本、简单的程序,再改进不迟。
以专业开发人员为伍
2010-11-16
打赏
举报
回复
其实依据网络不通,在选择tcp还是udp、数据块大小方面有所不同,其结果是传送时间可能只有20k、10M之差。这些是细节。
加载更多回复(1)
【CPO三维路径规划】豪猪算法CPO多无人机协同集群避障路径规划(目标函数:最低成本:路径、高度、威胁、转角)研究(Matlab代码实现)
内容概要:本文系统研究了基于豪猪优化算法(CPO)的多无人机协同集群在三维空间中的避障路径规划
问题
,聚焦于实现以最低成本为目标的航迹优化,综合考虑路径长度、飞行高度、威胁规避及转弯角度等多个关键因素。通过构建精细化的三维环境模型与多无人机协同机制,采用Matlab平台实现CPO算法的仿真与验证,充分展示了该算法在复杂动态障碍环境下的高效搜索能力与全局优化性能。研究不仅涵盖了路径规划的数学建模与目标函数设计,还深入探讨了算法的收敛特性与鲁棒性,为智能群体系统在实际场景中的应用提供了理论依据与技术支撑。; 适合人群:具备一定编程基础和优化算法背景,从事无人机系统控制、智能路径规划、群体协同、人工智能与自动化等相关领域的科研人员、高校研究生及工程技术人员。; 使用场景及目标:①应用于多无人机协同执行侦察、灾害监测、应
急救
援、区域巡检等复杂任务中的自主路径规划;②为智能优化算法在三维动态环境下的路径决策
问题
提供可复现的技术范例;③支持研究人员对CPO算法与其他主流群智能算法(如PSO、GWO、WOA等)进行性能对比与改进研究,推动路径规划技术的发展。; 阅读建议:建议结合提供的Matlab代码进行实践操作,重点理解目标函数的多维度建模方式与CPO算法的迭代优化流程,可通过调整环境参数与约束条件进行仿真实验,对比不同算法在相同场景下的路径质量与收敛速度,从而深入掌握其优势与适用边界。
电动汽车参与运行备用的能力评估及其仿真分析(Matlab代码实现)
内容概要:本文围绕电动汽车参与电力系统运行备用的能力评估展开深入研究,利用Matlab代码实现对电动汽车集群提供运行备用服务的建模与仿真分析。研究重点在于量化电动汽车作为分布式灵活资源参与电网辅助服务的潜力,通过构建精细化的数学模型,分析其可调功率容量、响应速度、时空分布特性及聚合能力,并采用多面体聚合、内近似模型与闵可夫斯基和等先进方法精确刻画其可调度能力边界。研究进一步结合大规模电动汽车接入场景,探讨其在多时间尺度调度框架下参与调峰、调频等辅助服务的优化策略,评估其对提升高比例可再生能源电网灵活性与稳定性的贡献,最终通过仿真验证所提模型与方法的有效性与实用性。; 适合人群:具备电力系统分析、智能电网、新能源汽车或优化调度等相关专业背景,熟悉Matlab/Simulink仿真工具,从事科研、工程应用的高校研究生、科研人员及电力行业工程师。; 使用场景及目标:①精确评估大规模电动汽车集群在不同约束条件下可提供的运行备用容量;②研究电动汽车在日前、日内及实时调度中的动态响应能力与优化调度策略;③为高渗透率新能源电力系统提供基于移动储能的灵活性资源解决方案,支撑电网安全经济运行。; 阅读建议:建议结合Matlab代码与技术文档同步学习,重点关注多面体聚合建模、能力边界计算及优化调度算法的设计与实现,可进一步拓展至V2G(车辆到电网)、需求响应等互动场景进行二次开发与应用验证。
中国城市房地产政策汇总数据(1957-2024.7)
房地产政策是政府为了引导和调控房地产市场,确保其健康稳定发展而制定的一系列法律法规和行政措施。包括政策类型、政策内容、限价、限购、土地供应、人才政策等,旨在平衡供需、稳定房价、保护消费者权益、促进资源合理配置及维护市场秩序 本次分享的房地产政策汇总数据,包括1957年以来各个城市出台的房地产政策,希望对房地产相关的研究有所帮助 一、数据介绍 数据名称:中国城市房地产政策汇总数据 数据范围:全国及各城市 数据年份:1957-2024.7 数据说明:不同年份的资料有所差别 二、主要指标 政策类型 政策标题 发文机构 政策所属地区 颁布时间 发文字号 实施日期 效力级别 成文日期 网址 城市名称 时间 标题 政策内容 分类 文件 主要内容 限购 限价 限售 限贷 土地供应 人才政策
C#
111,129
社区成员
642,535
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章