大热天,跪谢,急救:C# Scoket文件传输的问题

jasonlee0927 2010-11-15 11:18:36
我现在要做一个文件同步的window服务程序,就是有一个中央服务器A,还有其他几个子服务器B、C。然后B、C服务器每天定时将B、C服务器下指定目录下变动过的文件上传到中央服务器A的指定目录下。之前没做过Scoket方面的,还望各位帮下小弟,多谢了
...全文
321 21 打赏 收藏 转发到动态 举报
写回复
用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传输数据。
  • 打赏
  • 举报
回复
其实依据网络不同以及习惯不同,在选择tcp还是udp、数据块大小、xml还是简单文本(比如只是用换行回车分割)、长连接还是短连接等方面有所不同,其结果是传送速度可能有20k、10M之差。这些是细节。

同时,设计程序时要一并考虑到显示传送进度条的要求。

你先实现基本、简单的程序,再改进不迟。
  • 打赏
  • 举报
回复
其实依据网络不通,在选择tcp还是udp、数据块大小方面有所不同,其结果是传送时间可能只有20k、10M之差。这些是细节。
加载更多回复(1)
内容概要:本文系统研究了开关频率大于谐振频率(fs>fr)工况下,移相混合控制LLC谐振变换器在低压增益区域的工作特性,深入分析其在变频与移相结合控制模式下的调制机理、工作模态划分及损耗分布规律。通过Simulink平台构建高保真仿真模型,对变换器在不同负载和输入条件下的电压增益、转换效率、关键器件电压电流应力等性能指标进行了全面仿真验证,重点探讨了其在低增益区间的软开关实现能力与效率优化潜力,旨在提升LLC变换器在宽范围输入输出应用中的动态响应与能源转换效率。; 适合人群:从事电力电子变换器设计、高频电源开发及相关领域的高校研究生、科研院所研究人员及企业研发工程师,要求具备扎实的电路理论基础、电力电子技术知识以及一定的Simulink仿真能力。; 使用场景及目标:①深入理解LLC谐振变换器在fs>fr条件下采用移相混合控制的内在工作机理与模态转换过程;②掌握利用Simulink搭建复杂谐振变换器精确仿真模型的方法与技巧;③分析并优化低压增益区的增益特性与损耗构成,为设计高效率、高功率密度的软开关电源提供理论依据和数据支持; 阅读建议:建议读者结合文中所述仿真模型,亲自复现仿真过程,重点观察不同控制参数(如移相比、开关频率)对电压增益曲线和关键波形的影响,并对比传统变频控制策略,深入探究混合控制在拓宽调压范围、提升轻载效率方面的优势,从而深化对现代高效谐振电源设计的理解。
内容概要:本文提出了一种基于粒子群优化算法(PSO)的配电网光伏储能双层优化配置模型,以IEEE33节点系统为标准算例,实现光伏发电单元与储能系统的协同选址与定容优化。该模型采用双层架构设计,上层以投资成本、运行经济性及网络损耗最小为目标优化设备配置方案,下层通过潮流计算评估系统在不同负荷场景下的运行性能,综合考虑电压稳定性、供电可靠性及可再生能源消纳能力,最终通过Matlab编程实现完整求解流程,为高渗透率分布式电源接入背景下的配电网规划提供了有效的技术支撑。; 适合人群:具备电力系统分析基础和Matlab编程能力的研究生、高校科研人员及从事新能源并网、智能配电网规划与优化的工程技术人员。; 使用场景及目标:①研究含高比例光伏接入的配电网规划与运行协同优化问题;②掌握双层优化建模方法与粒子群算法在复杂电力系统问题中的应用技巧;③为实际工程中分布式光伏与储能系统的科学选址与容量配置提供理论依据与仿真验证平台。; 阅读建议:建议读者结合Matlab代码深入理解双层迭代求解机制,重点关注算法收敛性分析、参数敏感性测试,并可通过更换初始种群、调整权重因子或引入其他标准测试系统(如IEEE69节点)进行对比实验,进一步验证所提模型的普适性与鲁棒性。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧