winform:用Socket下传文件

IceCoffee503 2008-07-10 05:13:40
主要是把服务器上的文件传到客户端,其中文件包括视频、音频、Flash等各种文件。
...全文
79 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]


先建立连接
客户端侦听
服务器端将要发送的文件读取进来
循环发送
客户端接收,
生成本地文件

110,963

社区成员

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

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

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