winform:用Socket下传文件

IceCoffee503 2008-07-10 05:13:40
主要是把服务器上的文件传到客户端,其中文件包括视频、音频、Flash等各种文件。
...全文
116 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
IceCoffee503 2008-07-17
  • 打赏
  • 举报
回复
这几天忙的写代码,都忘了给分了,谢谢你的思路!
我已经做出来了!
IceCoffee503 2008-07-11
  • 打赏
  • 举报
回复
谢谢,我先看看
kkun_3yue3 2008-07-11
  • 打赏
  • 举报
回复
//接收数据
public void OnRecievedData(IAsyncResult ar) {
Socket listener = ar.AsyncState as Socket;
try {
int nBytesRec = listener.EndReceive(ar);

if (nBytesRec > 0) {
//byte ==> string
string sRecieved = Encoding.Unicode.GetString(msgBuff, 0, nBytesRec);

//处理来自客户端的消息
ProcessMessage(listener, sRecieved);

//注册消息回调函数
SetupRecieveCallback(listener);

//listener.Send(Encoding.Unicode.GetBytes(string.Format("Begin|kkun|kkun|{0}", user_list.Count <= 1)));
} else {
this.Invoke(new Action<IPEndPoint>(Tstring_User_Remove), listener.RemoteEndPoint);
this.Invoke(new Action<string>(Tstring_Info), string.Format("disconnect from server {0}", listener.RemoteEndPoint));
listener.Shutdown(SocketShutdown.Both);
listener.Close();
//continue;
}
} catch(Exception exp) {
this.Invoke(new Action<IPEndPoint>(Tstring_User_Remove), listener.RemoteEndPoint);
this.Invoke(new Action<string>(Tstring_Info), string.Format("disconnect from server {0}", listener.RemoteEndPoint));
this.Invoke(new Action<string>(Tstring_Info), string.Format("disconnect from server {0}", exp.Message));
listener.Shutdown(SocketShutdown.Both);
listener.Close();
}
}
kkun_3yue3 2008-07-11
  • 打赏
  • 举报
回复
//连接上服务器后,准备接收消息
public void OnConnect(IAsyncResult ar) {
Socket sock = (Socket)ar.AsyncState;

try {
if (sock.Connected) {
string _Command = string.Format("Login|{0}|{1}|{2}", clientInfo.UserName, clientInfo.UserName, clientInfo.UserName);
byte[] _bCommand = Encoding.Unicode.GetBytes(_Command);
client.Send(_bCommand);

AsyncCallback recieveData = new AsyncCallback(OnRecievedData);
sock.BeginReceive(msgBuff, 0, msgBuff.Length, SocketFlags.None, recieveData, sock);
}
} catch (Exception ex) {
throw ex;
}
}










//开始侦听
public void OnConnectRequest(IAsyncResult ar) {
Socket listener = ar.AsyncState as Socket;
client = listener.EndAccept(ar);

client.BeginReceive(msgBuff, 0, msgBuff.Length, SocketFlags.None, new AsyncCallback(OnRecievedData), client);
listener.BeginAccept(new AsyncCallback(OnConnectRequest), listener);
}
IceCoffee503 2008-07-11
  • 打赏
  • 举报
回复
OnConnect
OnConnectRequest
这两个是什么意思呀
kkun_3yue3 2008-07-11
  • 打赏
  • 举报
回复
客户端建立侦听

private void BeginService_Click(object sender, EventArgs e) {
try {
this.btnBegin.Enabled = false;
Socket listen = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
listen.Bind(server_ip);
listen.Listen(LISTEN_NUM);
listen.BeginAccept(new AsyncCallback(OnConnectRequest), listen);
} catch (Exception) {
return;
}
}



服务器端与客户端建立连接

Socket client;
private void 连接服务器ToolStripMenuItem_Click(object sender, EventArgs e) {
try {
client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
client.Blocking = false;
client.BeginConnect(clientInfo.ServerIPEndPoint, new AsyncCallback(OnConnect), client);
} catch (Exception exp) {
throw exp;
}
}



服务器端将要发送的文件读取进来
//代码仅做演示,实际开发中要考虑很多问题,这里仅供参考

FileStream fs = new FileStream("c:\\1.xls", FileMode.Open);
if (fs != null) {
byte[] _buffer=new byte[int.MaxValue];
int i = fs.Read(_buffer, 0, (int)fs.Length);
}



循环发送
...

生成文件地文件参考〔服务器端将要发送的文件读取进来〕
kkun_3yue3 2008-07-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 lizeqin503 的帖子:]
主要是把服务器上的文件传到客户端,其中文件包括视频、音频、Flash等各种文件。
[/Quote]


先建立连接
客户端侦听
服务器端将要发送的文件读取进来
循环发送
客户端接收,
生成本地文件
内容概要:本文围绕“基于共享储能服务的智能楼宇双层优化配置”展开研究,提出了一种结合上层共享储能配置优化与下层楼宇内部能源调度优化的双层协同模型,通过Matlab代码实现,旨在提升智能楼宇在复杂能源环境下的运行效率与经济性。研究充分考虑光伏出力、负荷需求等不确定性因素,引入多维核密度估计、场景生成与削减等技术进行不确定性建模,并融合需求响应、微电网调度等先进理念,实现了对综合能源系统中储能资源的高效配置与动态调控,具有较强的理论深度与工程应用价值。; 适合人群:具备电力系统、可再生能源、优化算法或综合能源系统等相关背景,从事科研、工程应用或课题研究的研发人员、研究生及高年级本科生。; 使用场景及目标:①应用于智能楼宇、园区微电网、虚拟电厂等场景中的储能规划与运行优化;②支撑高水平学术论文(如EI/SCI)的复现、课题申报、毕业设计及实际项目的双层优化建模与求解实践。; 阅读建议:建议结合提供的Matlab代码进行实操演练,重点理解双层优化架构的设计逻辑、求解策略(如Benders分解、主从博弈等)及不确定性处理方法,同时可参考文中关联技术(如场景生成、需求响应)拓展研究思路与应用场景。

111,129

社区成员

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

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

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