这里贴核心部分。using System;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Text;namespace FileSender
{
public static class FileSender
{
private const int BufferSize = 1024; public static void Send(IPEndPoint ip, string path)
{
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sock.Connect(ip);
using (FileStream reader = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.None))
{
long send = 0L, length = reader.Length;
sock.Send(BitConverter.GetBytes(length));
string fileName = Path.GetFileName(path);
sock.Send(Encoding.Default.GetBytes(fileName));
Console.WriteLine("Sending file:" + fileName + ".Plz wait...");
byte[] buffer = new byte[BufferSize];
int read, sent;
//断点发送 在这里判断设置reader.Position即可
while ((read = reader.Read(buffer, 0, BufferSize)) != 0)
{
sent = 0;
while ((sent += sock.Send(buffer, sent, read, SocketFlags.None)) < read)
{
send += (long)sent;
//Console.WriteLine("Sent " + send + "/" + length + ".");//进度
}
}
Console.WriteLine("Send finish.");
}
} public static void Receive(IPEndPoint ip, string path)
{
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sock.Bind(ip);
sock.Listen(1);
Socket client = sock.Accept();
byte[] buffer = new byte[BufferSize];
client.Receive(buffer);
long receive = 0L, length = BitConverter.ToInt64(buffer, 0);
string fileName = Encoding.Default.GetString(buffer, 0, client.Receive(buffer));
Console.WriteLine("Receiveing file:" + fileName + ".Plz wait...");
using (FileStream writer = new FileStream(Path.Combine(path, fileName), FileMode.Create, FileAccess.Write, FileShare.None))
{
int received;
//断点接受 在这里判断设置writer.Position即可
while (receive < length)
{
received = client.Receive(buffer);
writer.Write(buffer, 0, received);
writer.Flush();
receive += (long)received;
//Console.WriteLine("Received " + receive + "/" + length + ".");//进度
}
}
Console.WriteLine("Receive finish.");
}
}
}代码见 http://download.csdn.net/source/2413127
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Text;namespace FileSender
{
public static class FileSender
{
private const int BufferSize = 1024; public static void Send(IPEndPoint ip, string path)
{
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sock.Connect(ip);
using (FileStream reader = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.None))
{
long send = 0L, length = reader.Length;
sock.Send(BitConverter.GetBytes(length));
string fileName = Path.GetFileName(path);
sock.Send(Encoding.Default.GetBytes(fileName));
Console.WriteLine("Sending file:" + fileName + ".Plz wait...");
byte[] buffer = new byte[BufferSize];
int read, sent;
//断点发送 在这里判断设置reader.Position即可
while ((read = reader.Read(buffer, 0, BufferSize)) != 0)
{
sent = 0;
while ((sent += sock.Send(buffer, sent, read, SocketFlags.None)) < read)
{
send += (long)sent;
//Console.WriteLine("Sent " + send + "/" + length + ".");//进度
}
}
Console.WriteLine("Send finish.");
}
} public static void Receive(IPEndPoint ip, string path)
{
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sock.Bind(ip);
sock.Listen(1);
Socket client = sock.Accept();
byte[] buffer = new byte[BufferSize];
client.Receive(buffer);
long receive = 0L, length = BitConverter.ToInt64(buffer, 0);
string fileName = Encoding.Default.GetString(buffer, 0, client.Receive(buffer));
Console.WriteLine("Receiveing file:" + fileName + ".Plz wait...");
using (FileStream writer = new FileStream(Path.Combine(path, fileName), FileMode.Create, FileAccess.Write, FileShare.None))
{
int received;
//断点接受 在这里判断设置writer.Position即可
while (receive < length)
{
received = client.Receive(buffer);
writer.Write(buffer, 0, received);
writer.Flush();
receive += (long)received;
//Console.WriteLine("Received " + receive + "/" + length + ".");//进度
}
}
Console.WriteLine("Receive finish.");
}
}
}代码见 http://download.csdn.net/source/2413127
解决方案 »
- 【框架迁移】40万行代码的MFC项目移植到.net的难度有多大?(需要多少人/月)有没有大牛干过?
- C# notifyicon 托盘图标背景透明
- java的stringbuffer与DecimalFormat分别在c#中的对应
- vs2003 的textbox控件怎么没有fouce 事件?
- .net控件的问题
- 50分求思路,怎样有效的用C#编程实时监控IIS的连接等状态
- 高考考了593,能去上海什么大学,理科的,谢谢
- 如何让应用程序进程不被任务管理器关闭!最好能有实例代码!100分酬谢。
- winform窗体UI效果是怎样实现的?
- 关于枚举向字符串的转换
- wince 窗口重绘的问题
- 急,求救如何用C#编写读取网页显示HTML源码到文本框
测试环境:win2003+.net3.5
硬件:2核+2G
发送和接送公用 CPU40%左右 内存使用稳定在8000+K
ipone、ASP.NET、AJAX、C#、ASP.NET MVC等