怎么通过开放的端口,把文件复制到对方机器里去,项目特殊需求很急 例如:对方开放TCP80端口,怎么把一个“bin”文件复制到对方的机器里去? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 UDPReceive side:using System;using System.IO;using System.Net;using System.Net.Sockets;using System.Diagnostics;using System.Text;using System.Xml.Serialization;namespace FileReceive{ public class FileRecv { [Serializable] public class FileDetails { public string FILETYPE = ""; public long FILESIZE = 0; } private static FileDetails fileDet; //UdpClient vars private static int localPort = 5002; private static UdpClient receivingUdpClient = new UdpClient(localPort); private static IPEndPoint RemoteIpEndPoint = null; private static FileStream fs; private static byte[] receiveBytes = new byte[0]; private static byte[] subreceiveBytes = new byte[0]; [STAThread] static void Main(string[] args) { //Get the file details GetFileDetails(); //Receive file; ReceiveFile(); } private static void GetFileDetails() { try { Console.WriteLine("-----------------Waiting to get File Details!!----------------"); //Receive File info byte[] receiveBytes = receivingUdpClient.Receive(ref RemoteIpEndPoint); Console.WriteLine("receive file details!!"); XmlSerializer fileSerializer = new XmlSerializer(typeof(FileDetails)); MemoryStream stream1 = new MemoryStream(); //Received byte to stream stream1.Write(receiveBytes, 0, receiveBytes.Length); stream1.Position = 0; //IMP //call the Deserialize method and cast to the object type fileDet = (FileDetails)fileSerializer.Deserialize(stream1); Console.WriteLine("Receive file of type." + fileDet.FILETYPE + " whose size is " + fileDet.FILESIZE.ToString() + " bytes"); } catch (Exception e) { Console.WriteLine(e.ToString()); } } public static void ReceiveFile() { int insertpoint=0,i=0; byte[] a = new byte[1]; try { receiveBytes = new byte[fileDet.FILESIZE]; Console.WriteLine("--------------Waiting to get File-------------------"); //Receive file //receiveBytes = receivingUdpClient.Receive(ref RemoteIpEndPoint); //Console.WriteLine("------File received...Saving...."); ////Create temp file from received file extension //fs = new FileStream("temp." + fileDet.FILETYPE, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite); //fs.Write(receiveBytes, 0, receiveBytes.Length); //Console.WriteLine("---File Saved----" + receiveBytes.Length.ToString()); //Console.WriteLine("---Opening file with associated program----"); //Process.Start(fs.Name); //Opens file with associated program #region big while (true) { subreceiveBytes = receivingUdpClient.Receive(ref RemoteIpEndPoint); Array.Copy(subreceiveBytes, subreceiveBytes.Length - 1, a, 0, 1); string returnData = Encoding.ASCII.GetString(a); if (returnData.IndexOf((char)3) > -1) { Array.Copy(subreceiveBytes, 0, receiveBytes, insertpoint, subreceiveBytes.Length - 1); //Convert and display data Console.WriteLine("------File received...Saving...."); //Create temp file from received file extension fs = new FileStream("temp." + fileDet.FILETYPE, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite); fs.Write(receiveBytes, 0, receiveBytes.Length); Console.WriteLine("---File Saved----" + receiveBytes.Length.ToString()); Console.WriteLine("---Opening file with associated program----"); Process.Start(fs.Name); //Opens file with associated program } else { i++; Console.WriteLine(i.ToString()); Array.Copy(subreceiveBytes, 0, receiveBytes, insertpoint, subreceiveBytes.Length); insertpoint += subreceiveBytes.Length; } } #endregion } catch (Exception ex) { Console.WriteLine(ex.ToString()); } finally { fs.Close(); receivingUdpClient.Close(); } } }} Send side:using System;using System.IO;using System.Net;using System.Net.Sockets;using System.Text;using System.Xml.Serialization;using System.Diagnostics;using System.Threading;namespace FileSender{ public class FileSender { //File details (Req. for receiver) [Serializable] public class FileDetails { public string FILETYPE=""; public long FILESIZE=0; } private static FileDetails fileDet = new FileDetails(); //UdpClient - related fields private static IPAddress remoteIPAddress; private const int remotePort=5002; private static UdpClient sender = new UdpClient(); private static IPEndPoint endPoint; //Filestream object private static FileStream fs; [STAThread] static void Main(string[] args) { try { //Get remote IP address and create IPEndPoint //Console.WriteLine("Enter Remote IP address"); remoteIPAddress = IPAddress.Parse("127.255.255.255");// IPAddress.Parse(Console.ReadLine().ToString()); endPoint = new IPEndPoint(remoteIPAddress,remotePort); //Get file path. (IMP:file size should be less than 8K) Console.WriteLine("Enter file path and name to send."); fs = new FileStream(@Console.ReadLine().ToString(), FileMode.Open, FileAccess.Read); //if (fs.Length > 8192) //{ // Console.WriteLine("This version transfers files with size <8192 bytes"); // sender.Close(); // fs.Close(); // return; //} SendFileInfo(); Thread.Sleep(2000); //SendFile(); #region big byte[] a = Encoding.ASCII.GetBytes(((char)3).ToString()); long remainlength = fs.Length - (long)(fs.Length / 8192) * 8192 + 1; if (fs.Length > 8192) { for (int i = 0; i < fs.Length / 8192; i++) { byte[] fixbyte = new byte[8192]; fs.Read(fixbyte, 0, 8192); SendFile(fixbyte); Console.WriteLine("send " + (i + 1).ToString() + " times"); } byte[] remainbyte = new byte[remainlength]; fs.Read(remainbyte, 0, (int)remainlength - 1); Array.Copy(Encoding.ASCII.GetBytes(((char)3).ToString()), 0, remainbyte, remainbyte.Length - 1, 1); SendFile(remainbyte); } #endregion Console.ReadLine(); } catch (Exception e) { Console.WriteLine(e.ToString()); } } public static void SendFileInfo() { //Get file type or extension fileDet.FILETYPE = fs.Name.Substring((int)fs.Name.Length -3,3); //Get file length(futrue purpose) fileDet.FILESIZE = fs.Length; XmlSerializer fileSerializer = new XmlSerializer(typeof(FileDetails)); MemoryStream stream = new MemoryStream(); //Serialize object fileSerializer.Serialize(stream,fileDet); //Stream to byte stream.Position = 0; byte[] bytes = new byte[stream.Length]; stream.Read(bytes,0,Convert.ToInt32(stream.Length)); Console.WriteLine("Sending file details..."); //Send file details sender.Send(bytes, bytes.Length, endPoint); stream.Close(); } public static void SendFile() { //Creating a file stream byte[] bytes = new byte[fs.Length]; //stream to bytes fs.Read(bytes,0,bytes.Length); Console.WriteLine("Sending file...size=" + fs.Length + " bytes"); try { sender.Send(bytes,bytes.Length, endPoint); } catch (Exception e) { Console.WriteLine(e.ToString()); } finally { //Clean up fs.Close(); sender.Close(); } Console.Read(); Console.WriteLine("File sent sucessfully."); } public static void SendFile(byte[] subfilebytes) { try { sender.Send(subfilebytes, subfilebytes.Length, endPoint); //Console.WriteLine(Encoding.ASCII.GetString(subfilebytes)); } catch (Exception e) { Console.WriteLine(e.ToString()); } finally { //sender.Close(); } Console.WriteLine("Sub File Part sent sucessfully."); } }} TCP的话除发送接收外其他代码都不用变,TCP最大包是65536,如果文件大于这个需要做拆分,UDP最大是8192 to 例如:对方开放TCP80端口,怎么把一个“bin”文件复制到对方的机器里去?如果你想通过http协议来传输文件的话,你需要在对方机器设置某些虚拟目录之类的,你才能通过webclient的方式向对方传输文件;或者更深的一层,你做个socket来监听80端口(会和某些程序有冲突),放到对方机器端来监听socket请求。否则,你只开了80端口,其他什么也不做,一样不能传输文件。 vs.net2008能否在windows2000sp4下正常运行开发C#程序 如何让HwndSource永远处于最上端(On Topmost) 请问在PDA里如何用C#获取桌面的句柄 .NET新手提问? 关于ListBox的简单问题,见笑了 socket异步数据发送多个数据 请求高手解答 form中的相对路径问题 C# 实现重新启动计算机? c#编写的windows服务程序调用不了c#写的类库 c#主要用来做什么 可以用来作底层开发吗? C#中,“实现”是指什么
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Diagnostics;
using System.Text;
using System.Xml.Serialization;namespace FileReceive
{
public class FileRecv
{
[Serializable]
public class FileDetails
{
public string FILETYPE = "";
public long FILESIZE = 0;
} private static FileDetails fileDet;
//UdpClient vars
private static int localPort = 5002;
private static UdpClient receivingUdpClient = new UdpClient(localPort);
private static IPEndPoint RemoteIpEndPoint = null;
private static FileStream fs;
private static byte[] receiveBytes = new byte[0];
private static byte[] subreceiveBytes = new byte[0];
[STAThread]
static void Main(string[] args)
{
//Get the file details
GetFileDetails();
//Receive file;
ReceiveFile();
} private static void GetFileDetails()
{
try
{
Console.WriteLine("-----------------Waiting to get File Details!!----------------");
//Receive File info
byte[] receiveBytes = receivingUdpClient.Receive(ref RemoteIpEndPoint);
Console.WriteLine("receive file details!!"); XmlSerializer fileSerializer = new XmlSerializer(typeof(FileDetails));
MemoryStream stream1 = new MemoryStream(); //Received byte to stream
stream1.Write(receiveBytes, 0, receiveBytes.Length);
stream1.Position = 0; //IMP //call the Deserialize method and cast to the object type
fileDet = (FileDetails)fileSerializer.Deserialize(stream1);
Console.WriteLine("Receive file of type." + fileDet.FILETYPE + " whose size is " + fileDet.FILESIZE.ToString() + " bytes");
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
} public static void ReceiveFile()
{
int insertpoint=0,i=0;
byte[] a = new byte[1];
try
{
receiveBytes = new byte[fileDet.FILESIZE];
Console.WriteLine("--------------Waiting to get File-------------------"); //Receive file
//receiveBytes = receivingUdpClient.Receive(ref RemoteIpEndPoint);
//Console.WriteLine("------File received...Saving...."); ////Create temp file from received file extension
//fs = new FileStream("temp." + fileDet.FILETYPE, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
//fs.Write(receiveBytes, 0, receiveBytes.Length); //Console.WriteLine("---File Saved----" + receiveBytes.Length.ToString());
//Console.WriteLine("---Opening file with associated program----"); //Process.Start(fs.Name); //Opens file with associated program #region big
while (true)
{
subreceiveBytes = receivingUdpClient.Receive(ref RemoteIpEndPoint);
Array.Copy(subreceiveBytes, subreceiveBytes.Length - 1, a, 0, 1);
string returnData = Encoding.ASCII.GetString(a);
if (returnData.IndexOf((char)3) > -1)
{
Array.Copy(subreceiveBytes, 0, receiveBytes, insertpoint, subreceiveBytes.Length - 1); //Convert and display data
Console.WriteLine("------File received...Saving...."); //Create temp file from received file extension
fs = new FileStream("temp." + fileDet.FILETYPE, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
fs.Write(receiveBytes, 0, receiveBytes.Length); Console.WriteLine("---File Saved----" + receiveBytes.Length.ToString());
Console.WriteLine("---Opening file with associated program----"); Process.Start(fs.Name); //Opens file with associated program
}
else
{
i++;
Console.WriteLine(i.ToString());
Array.Copy(subreceiveBytes, 0, receiveBytes, insertpoint, subreceiveBytes.Length);
insertpoint += subreceiveBytes.Length;
}
}
#endregion
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
finally
{
fs.Close();
receivingUdpClient.Close();
}
}
}
}
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Xml.Serialization;
using System.Diagnostics;
using System.Threading;namespace FileSender
{
public class FileSender
{
//File details (Req. for receiver)
[Serializable]
public class FileDetails
{
public string FILETYPE="";
public long FILESIZE=0;
}
private static FileDetails fileDet = new FileDetails(); //UdpClient - related fields
private static IPAddress remoteIPAddress;
private const int remotePort=5002;
private static UdpClient sender = new UdpClient();
private static IPEndPoint endPoint;
//Filestream object
private static FileStream fs; [STAThread]
static void Main(string[] args)
{
try
{
//Get remote IP address and create IPEndPoint
//Console.WriteLine("Enter Remote IP address");
remoteIPAddress = IPAddress.Parse("127.255.255.255");// IPAddress.Parse(Console.ReadLine().ToString());
endPoint = new IPEndPoint(remoteIPAddress,remotePort); //Get file path. (IMP:file size should be less than 8K)
Console.WriteLine("Enter file path and name to send.");
fs = new FileStream(@Console.ReadLine().ToString(), FileMode.Open, FileAccess.Read); //if (fs.Length > 8192)
//{
// Console.WriteLine("This version transfers files with size <8192 bytes");
// sender.Close();
// fs.Close();
// return;
//} SendFileInfo();
Thread.Sleep(2000); //SendFile();
#region big
byte[] a = Encoding.ASCII.GetBytes(((char)3).ToString()); long remainlength = fs.Length - (long)(fs.Length / 8192) * 8192 + 1;
if (fs.Length > 8192)
{
for (int i = 0; i < fs.Length / 8192; i++)
{
byte[] fixbyte = new byte[8192];
fs.Read(fixbyte, 0, 8192);
SendFile(fixbyte);
Console.WriteLine("send " + (i + 1).ToString() + " times");
}
byte[] remainbyte = new byte[remainlength];
fs.Read(remainbyte, 0, (int)remainlength - 1);
Array.Copy(Encoding.ASCII.GetBytes(((char)3).ToString()), 0, remainbyte, remainbyte.Length - 1, 1);
SendFile(remainbyte);
}
#endregion Console.ReadLine();
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
} public static void SendFileInfo()
{
//Get file type or extension
fileDet.FILETYPE = fs.Name.Substring((int)fs.Name.Length -3,3);
//Get file length(futrue purpose)
fileDet.FILESIZE = fs.Length; XmlSerializer fileSerializer = new XmlSerializer(typeof(FileDetails));
MemoryStream stream = new MemoryStream();
//Serialize object
fileSerializer.Serialize(stream,fileDet);
//Stream to byte
stream.Position = 0;
byte[] bytes = new byte[stream.Length];
stream.Read(bytes,0,Convert.ToInt32(stream.Length)); Console.WriteLine("Sending file details...");
//Send file details
sender.Send(bytes, bytes.Length, endPoint);
stream.Close();
} public static void SendFile()
{
//Creating a file stream
byte[] bytes = new byte[fs.Length];
//stream to bytes
fs.Read(bytes,0,bytes.Length);
Console.WriteLine("Sending file...size=" + fs.Length + " bytes");
try
{
sender.Send(bytes,bytes.Length, endPoint);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
finally
{
//Clean up
fs.Close();
sender.Close();
}
Console.Read();
Console.WriteLine("File sent sucessfully.");
} public static void SendFile(byte[] subfilebytes)
{
try
{
sender.Send(subfilebytes, subfilebytes.Length, endPoint);
//Console.WriteLine(Encoding.ASCII.GetString(subfilebytes));
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
finally
{
//sender.Close();
}
Console.WriteLine("Sub File Part sent sucessfully.");
}
}
}