说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

如何用C#写Ftp文件上传方面的程序????????

编辑:说三道四文库 发布时间:2017-02-27 01:01
HTML文档下载 WORD文档下载 PDF文档下载
gz
up
我有一些代码资料,要的话留下e-mail地址。
echomyself@china.com
我要,谢谢
我:tcyun@21cn.com
俺也要了,fangzhenyi@263.net
谢了
三个人都发了。
to: CForce()
我收到了,可是什么也没有,既没有附件,也没有任何文字,能再发一遍吗?
echomyself@china.com 
or 
javanow@21cn.com
thanks
to javanow(苏珊娜别哭泣) and  gap435(晕):
不好意思,两位,检查了一下,给你们的邮件真的无附件。重发了,这次应该不会错了。
收到了。谢谢!!!
:)
up
我也想要!!
rdiw@21cn.com
谢谢!!
给我一份 huangbo_email@263.net
up
watch@39.net
thanks!
我也要,哈哈,没来晚吧:)

webmaster@fm960.com
我也要
lnyes@sina.com
我要~~~~~~~~~~~~~~
谢谢~~

milkmouse@etang.com
我也想要philpsun@hotmail.com
我也要
huang_leon@etang.com
可以给我也发一个么???
wftree@21cn.com
xu_zhi77@sohu.com
namespace FTP_Server
{
    using System;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Text;
using System.Threading;
    /// <summary>
    ///    Server Implementing some of the FTP Protocols
    /// </summary>
    public delegate void CloseFTP();
public delegate void Connected(Thread oThread,string IP);
public delegate void Disconnected(Thread oThread,string IP);
public delegate void Disconnect(Thread oThread);
public class FTPServer
    {
        private TCPListener FTPCommandListner;
private Socket ClientSocket;
private static int ClientID=0;
private string ClientIP;
private static int intPort;
private bool bClose=false;
//Declare a Private Delegate that will be raised when client ask for Passive mode
//for Data Transfer
//private delegate Socket PassiveSocket(ref TCPListener clientDataListner);
//Declare a reference to an Client delegate
//Register the delegate to raise event for the Console update
private OnMsgArrived onMsgArrived=new OnMsgArrived(Console.ClientConnect);

public FTPServer()
{

}

public void Dispose()
{
if (FTPCommandListner!=null)
{
bClose=true;
Thread.CurrentThread.Join(1000);
if(FTPCommandListner.Pending())
{
FTPCommandListner.Stop();
}
//FTPCommandListner.Stop();
}
}


public bool Close
{
set
{
bClose=value;
}
}
public Thread Start()
{
Thread startFTPServer=new Thread(new ThreadStart(Run));
startFTPServer.Start();
return startFTPServer;
}

public void EndSession()
{
if (FTPCommandListner!=null)
{
bClose=true;
FTPCommandListner.Stop();
}
}

private void  Run()
        {
Thread ClientThread;
FTPCommandListner=new TCPListener(21);
FTPCommandListner.Start();
            try
{
while (true)
{
ClientSocket=FTPCommandListner.Accept();
ClientThread=new Thread(new ThreadStart(FTPClientThread));
ClientIP=ClientSocket.RemoteEndpoint.ToString();
//Raise Event
ClientID++;
onMsgArrived(ClientID,ClientIP);
Connected clientConnected=new Connected(Console.Connected);
clientConnected(ClientThread,ClientIP);
ClientThread.Start();
}
}
catch(ThreadInterruptedException e)
{
Thread.CurrentThread.Abort();
}
catch(ThreadStopException e)
{
System.Console.WriteLine("Thread killed");
}
        }

private void FTPClientThread()
{
int Port=0;
string user="",dir="/";
string PresentDirOnFTP="/";
string rootDirOnSystem="C:";
int ClientID =  FTPServer.ClientID;
TCPListener FTPDataListner=null;
TCPClient FTPDataClient=null;
Socket ClientSocket=this.ClientSocket;
Socket PassiveClientDataSocket=null;
bool PassiveMode=false;
string serverMsg="";
string strIP=ClientSocket.RemoteEndpoint.ToString();
try

//Open a Buffered Network Stream for PI(Protocol Interpreter) IN.
NetworkStream inBuffer=new NetworkStream(ClientSocket,FileAccess.Read);
//Open a Buffered Network Stream for PI(Protocol Interpreter) OUT.
NetworkStream outBuffer=new NetworkStream(ClientSocket,FileAccess.Write);
//Open a Buffered Network Stream for DTP (Data Transfer Protocol).
NetworkStream nwClientData;
string oldFileName="";
//Send Greeting to Client
serverMsg="220 FTP server[FTP Server in C# by Pramod Kumar Singh]\r\n" ;
SendMsg(serverMsg,ref outBuffer);
bool done = false;
    while(!done)
{  
//break for some time
//other wise with the loop the CPU is 100%
Thread.Sleep(100);
if(!bClose)
{
string clientMsg ;
//Poll on the Socket to see do we have data to read
clientMsg=ReadMsgFromBuffer(ref ClientSocket,ref inBuffer);
string strSwitchExpression=clientMsg.Length==0?"": clientMsg.Substring(0,4).Trim();
//Parse the FTP Command from Client.
//Tested all the Commands here with Microsoft Command Prompt FTP .
strSwitchExpression=strSwitchExpression.ToUpper();
switch(strSwitchExpression)
{
case "USER":
Console.ClientConnect(ClientID,clientMsg);
user = clientMsg.Substring(4).Trim();
SendMsg("331 Password\r\n",ref outBuffer);
break;
case "PASS":
Console.ClientConnect(ClientID,clientMsg);
SendMsg("230 User "+ user +" logged in\r\n",ref outBuffer);
break;
case "XCWD":
goto case "CWD";
case "CDUP":
Console.ClientConnect(ClientID,clientMsg);
//Move up one directory
string changeToDir ="..";
SendMsg(ChangeDirectory(rootDirOnSystem,ref PresentDirOnFTP,changeToDir),ref outBuffer);
break;
case "XCUP":
//Move up one directory
Console.ClientConnect(ClientID,clientMsg);
changeToDir ="..";
SendMsg(ChangeDirectory(rootDirOnSystem,ref PresentDirOnFTP,changeToDir),ref outBuffer);
break;
case "CWD":
Console.ClientConnect(ClientID,clientMsg);
changeToDir =clientMsg.Substring(3).Trim();
SendMsg(ChangeDirectory(rootDirOnSystem,ref PresentDirOnFTP,changeToDir),ref outBuffer);
break;
case "PORT":
Console.ClientConnect(ClientID,clientMsg);
PortData(clientMsg,out Port,out strIP);
PassiveMode=false;
SendMsg("200 PORT command successful\r\n",ref outBuffer); 
break;
case "PASV":
Console.ClientConnect(ClientID,clientMsg);
FTPDataListner=null;
int intPassivePort=PassiveModePort(ref FTPDataListner);
string strIPAddress=ClientSocket.RemoteEndpoint.ToString();
//Remove the client Port
strIPAddress=strIPAddress.IndexOf(":")>0?strIPAddress.Substring(0,strIPAddress.IndexOf(":")):strIPAddress;
strIPAddress=strIPAddress.Replace(new string(".").ToChar(), new string(",").ToChar());
strIPAddress = strIPAddress + "," + intPassivePort / 256 + "," + (intPassivePort % 256);
SendMsg("227 Entering Passive Mode (" + strIPAddress + ")\r\n",ref outBuffer);
PassiveClientDataSocket=PassiveClientSocket(ref FTPDataListner,intPassivePort);
if(PassiveClientDataSocket==null)
{
SendMsg("425 Error in Passive Mode connection\r\n",ref outBuffer);
}
PassiveMode=true;
break;
case "TYPE":
//Emulate the TYPE Command
Console.ClientConnect(ClientID,clientMsg);
SendMsg("200 type set\r\n",ref outBuffer);
break;
case "RETR":
//Send the requested file to Client.
//Raise event for the Console Window to register the request
Console.ClientConnect(ClientID,clientMsg);    
SendMsg("150 Binary data connection\r\n",ref outBuffer);
clientMsg = clientMsg.Substring(4).Trim();
//Open the requested file for Transfer.
clientMsg=clientMsg.Replace(new string("\\").ToChar(),'/');
clientMsg=(clientMsg.Substring(0,1)=="/"?clientMsg.Substring(1):clientMsg);
string strPath = rootDirOnSystem+ PresentDirOnFTP;
strPath=(strPath.Substring(strPath.Length-1,1)=="/"?strPath:strPath+"/");
strPath+=clientMsg;
nwClientData= Mode(PassiveMode,ref FTPDataClient,ref PassiveClientDataSocket,strIP,Port);
if(SendFile(strPath,ref nwClientData))
{
SendMsg("226 transfer complete\r\n",ref outBuffer);
}
else
{
SendMsg("550 file not found, or no access.\r\n",ref outBuffer);
}
PassiveMode=false;
break;
case "STOR":
//Create File on the FTP Server
SendMsg("150 Binary data connection\r\n",ref outBuffer);
Console.ClientConnect(ClientID,clientMsg);   
clientMsg= clientMsg.Substring(4).Trim();
nwClientData= Mode(PassiveMode,ref FTPDataClient,ref PassiveClientDataSocket,strIP,Port);
//Open the requested file for Transfer.
clientMsg=clientMsg.Replace(new string("\\").ToChar(),'/');
clientMsg=(clientMsg.Substring(0,1)=="/"?clientMsg.Substring(1):clientMsg);
strPath = rootDirOnSystem+ PresentDirOnFTP;
strPath=(strPath.Substring(strPath.Length-1,1)=="/"?strPath:strPath+"/");
strPath+=clientMsg;
//Open the requested file for Transfer.
if(CreateFile(strPath,ref nwClientData))
{
SendMsg("226 transfer complete \r\n",ref outBuffer);
}
else
{
SendMsg("550 file not found, or no access.\r\n",ref outBuffer);
}
PassiveMode=false;
break;
case "NLST":
goto case "LIST";
case "LIST":
Console.ClientConnect(ClientID,clientMsg);
SendMsg("150 ASCII data\r\n",ref outBuffer);
nwClientData=Mode(PassiveMode,ref FTPDataClient,ref PassiveClientDataSocket,strIP,Port);
ListDirectory(rootDirOnSystem,PresentDirOnFTP,ref nwClientData);
//Close the socket to signal the End of Data Transfer
if(!PassiveMode)
{
nwClientData.Close();
}
else
{
if(PassiveClientDataSocket!=null)
{
nwClientData.Close();
}
}
SendMsg("226 Transfer complete.\r\n",ref outBuffer);
break;
case "XPWD":
goto case "PWD"; 
case "PWD":
Console.ClientConnect(ClientID,clientMsg);
SendMsg("257 " + "\"" + PresentDirOnFTP + "\"" + " is current directory \r\n" ,ref outBuffer);
break;
case "DELE":
//Delete the file from the Server and reply back.
Console.ClientConnect(ClientID,clientMsg);
clientMsg= clientMsg.Substring(4).Trim();
SendMsg(DeleteFileForServer(rootDirOnSystem,PresentDirOnFTP,clientMsg),ref outBuffer);
break;
case "XRMD":
goto case "RMD";
case "RMD":
//Remove Directory
Console.ClientConnect(ClientID,clientMsg);
clientMsg= clientMsg.Substring(4).Trim();
SendMsg(RemoveDirectory(rootDirOnSystem,PresentDirOnFTP,clientMsg),ref outBuffer);
break;
case "XMKD":
goto case "MKD";
case "MKD":
//Make Directory
Console.ClientConnect(ClientID,clientMsg);
clientMsg= clientMsg.Substring(4).Trim();
SendMsg(CreateDirectory(rootDirOnSystem,PresentDirOnFTP,clientMsg),ref outBuffer);
break;
case "NOOP":
SendMsg("200 NOOP command executed.\r\n",ref outBuffer);
break;
case "HELP":
//214 list of supported command
break;
case "ABOR":
goto case "QUIT";
case "QUIT":
Console.ClientConnect(ClientID,clientMsg);
if(PassiveClientDataSocket!=null)
{
PassiveClientDataSocket.Close();
}
if(FTPDataClient!=null)
{
FTPDataClient.Close();
}
SendMsg("221 GOOD BYE\r\n",ref outBuffer);
done = true; 
break;
case "RNFR":
//Rename File
Console.ClientConnect(ClientID,clientMsg);
 oldFileName=FilePath(rootDirOnSystem,PresentDirOnFTP,clientMsg.Substring(4).Trim());
if(File.FileExists(oldFileName))
{
SendMsg("350 Requested file action pending further info \r\n",ref outBuffer);
}
else
{
SendMsg("550 Requested file not found\r\n",ref outBuffer);
oldFileName="";
}
break;
case "RNTO":
Console.ClientConnect(ClientID,clientMsg);
if(oldFileName!="")
{
string strNewFile=FilePath(rootDirOnSystem,PresentDirOnFTP,clientMsg.Substring(4).Trim());
File.Copy(oldFileName,strNewFile);
File.Delete(oldFileName);
}
SendMsg("250 Requested file action completed. \r\n",ref outBuffer);
break;
case "REST":
SendMsg("350 Requested file action pending further info \r\n",ref outBuffer);
break;

case "": //We have recieved blank 
break;
default: //We Don't understand the Command
Console.ClientConnect(ClientID,clientMsg);
SendMsg("500 Command not understood\r\n",ref outBuffer);
break;
}
}
else
{
done=true;
SendMsg("221 Connection forcefull closed. \r\n",ref outBuffer);
outBuffer.Close();
inBuffer.Close();
}
}
Disconnected clientDisconnted=new Disconnected(Console.Disconnected);
clientDisconnted(Thread.CurrentThread,ClientSocket.RemoteEndpoint.ToString());
ClientSocket.Close();
}
catch(ThreadInterruptedException e)
{
//SendMsg("221 Connection forcefull closed. \r\n",ref outBuffer);
//outBuffer.Close();
//inBuffer.Close();
Disconnected clientDisconnted=new Disconnected(Console.Disconnected);
clientDisconnted(Thread.CurrentThread,ClientSocket.RemoteEndpoint.ToString());
bClose=false;
Thread.CurrentThread.Abort();
}
catch (Exception e)
{
  //System.out.println(e);
Console.ClientConnect(ClientID,e.ToString());
}
//At the End make the flag true;
bClose=false;
}
//Interpreat the File Path
private string FilePath(string rootDirOnServer,string PresentDirOfFTP,string fileName)
{
Thread oThread =Thread.CurrentThread;
lock(oThread)
{
//Change to proper file format..
fileName= fileName.Trim();
rootDirOnServer=rootDirOnServer.Trim();
PresentDirOfFTP=PresentDirOfFTP.Trim();
rootDirOnServer=rootDirOnServer.Replace(new string("\\").ToChar(),'/');
PresentDirOfFTP=PresentDirOfFTP.Replace(new string("\\").ToChar(),'/');
fileName=fileName.Replace(new string("\\").ToChar(),'/');
//Remove the PresentDirOfFTP from filename
string root="";
string changeTo="";
//???? Open Point
if(fileName.LastIndexOf("/")>0)
{
//fileName=fileName.Remove(0,PresentDirOfFTP.Length);
fileName=fileName.Substring(0,1)!="/"?"/" +fileName : fileName;
root=rootDirOnServer + fileName;
changeTo=fileName;
}
else
{
root=rootDirOnServer + PresentDirOfFTP;
if (root.Substring(root.Length-1,1)!="/")
{
root+="/";
}
if(fileName.Substring(0,1)=="/")
{
fileName=fileName.Substring(1).Trim();
}
//Error Correction Logic
//??
string tmpRoot=root+fileName;
try
{
if(Directory.DirectoryExists(tmpRoot))
{
//Change to this Directory
root=tmpRoot;
}
else
{
//Not found try with System Root
tmpRoot=fileName.Substring(0,1)!="/"?"/" +fileName : fileName;
tmpRoot=rootDirOnServer + tmpRoot;
if(Directory.DirectoryExists(tmpRoot))
{
root=tmpRoot;
}
else
{
//Directory doen't exist...
root+=fileName;
}
}

}
catch(Exception e)
{
//No Directory Exist
root+=fileName;
}
}
return root;
}
}
//Rename the File
private string RenameTheFile(string fileName)
{
Thread oThread=Thread.CurrentThread;
lock(oThread)
{
try
{
if(File.FileExists(fileName))
{

}
}
catch(Exception e)
{
}
return null;
}
}
//Remove Directory
private string RemoveDirectory(string rootDirOnServer,string PresentDirOfFTP,string fileName)
{
Thread oThread=Thread.CurrentThread;
lock(oThread)
{
rootDirOnServer=rootDirOnServer.Replace(new string("\\").ToChar(),'/');
PresentDirOfFTP=PresentDirOfFTP.Replace(new string("\\").ToChar(),'/');
fileName=fileName.Replace(new string("\\").ToChar(),'/');
string root="";
root=rootDirOnServer + PresentDirOfFTP;
if (root.Substring(root.Length-1,1)!="/")
{
root+="/";
}
if(fileName.Substring(0,1)=="/")
{
fileName=fileName.Substring(1).Trim();
}
root+=fileName;
try
{
if(Directory.DirectoryExists(root))
{
Directory.Delete(root,true);
return "250 Directory deleted.\r\n";
}
else
{
return "550 Directory not found, or no access.\r\n";
}
}
catch(Exception e)
{
return "550 Command can't be executed.\r\n";
}
}
}
//Create Directory Command
private string CreateDirectory(string rootDirOnServer,string PresentDirOfFTP,string fileName)
{
Thread oThread =Thread.CurrentThread;
lock(oThread)
{
//Change to proper file format..
string root=FilePath(rootDirOnServer,PresentDirOfFTP,fileName);
try
{
if(Directory.DirectoryExists(root))
{
return "550 Directory already exists!\r\n";
}
else
{
Directory.CreateDirectory(root);
return "257 Directory Created.\r\n";
}
}
catch(Exception e)
{
Console.ClientConnect(ClientID,e.ToString());
return "550 Command can't executed.\r\n";
}
}
}
//Check for the directory
private string ChangeDirectory(string rootDirOnServer,ref string PresentDirOfFTP,string fileName)
{
Thread oThread =Thread.CurrentThread;
lock(oThread)
{
bool bUp =false;
string root=FilePath(rootDirOnServer,PresentDirOfFTP,fileName);
if(fileName.Length>=2)
{
if(fileName.Substring(0,2)==".." ||fileName.IndexOf("..")>0)
{
//change to parent dir..
//int iPos=fileName.IndexOf("..");
//string strChangeDir=fileName.Substring(iPos);
if(PresentDirOfFTP.Length>1)
{
string temp="";
string [] updir=fileName.Split(new char[] {'/'});
int iDirectoryUp=updir.Length;
int iStart=PresentDirOfFTP.Length;
for(int i=0;i<iDirectoryUp;i++)
{
int iPosUnder = PresentDirOfFTP.LastIndexOf("/",iStart);
temp = PresentDirOfFTP.Substring(0,iPosUnder);
iStart=iPosUnder-1;
if(iStart<=0)
{
break;
}
}
//string reverse=PresentDirOfFTP;
//StringBuilder t;
fileName=temp;
}
else if (PresentDirOfFTP.LastIndexOf("/")==0)
{
//We are at root
fileName="";
}
root=rootDirOnServer + fileName;
bUp=true ;
}
}
try
{
//Directory oDir=new Directory(root);
if(Directory.DirectoryExists(root))
{
//fileName=fileName.Substring(0,fileName.Length);
if (PresentDirOfFTP.Substring(PresentDirOfFTP.Length-1,1)=="/")
{
PresentDirOfFTP=PresentDirOfFTP.Substring(0,PresentDirOfFTP.Length-1);
}
if(bUp)
{
PresentDirOfFTP=root.Remove(0,rootDirOnServer.Length);
if(PresentDirOfFTP=="")
{
PresentDirOfFTP="/";
}
}
else
{
PresentDirOfFTP=root.Remove(0,rootDirOnServer.Length);
}
return "250 CWD command succesful\r\n";
}
else
{
Console.ClientConnect(ClientID,"Directory not found, or no access." + fileName);
return "550 Directory not found, or no access.\r\n";
}
}
catch(IOException e)
{
Console.ClientConnect(ClientID,e.ToString());
return "550 Directory not found, or no access.\r\n";
}
}
}
//Check for the FileName 
private string DeleteFileForServer(string rootDirOnServer,string PresentDirOfFTP,string fileName)
{
//check for seperator
Thread oThread =Thread.CurrentThread;
lock(oThread)
{
string root=FilePath(rootDirOnServer,PresentDirOfFTP,fileName);
try
{
File oFile=new File(root);
if(oFile.FullName!="")
{
oFile.Delete();
return "250 delete command successful\r\n";
}
}
catch(FileNotFoundException e)
{
Console.ClientConnect(ClientID,e.ToString());
return "550 file not found, or no access.\r\n";
}
catch(IOException e)
{
Console.ClientConnect(ClientID,e.ToString());
return "550 file not found, or no access.\r\n";
}
Console.ClientConnect(ClientID,"Error in Deleteing file " + fileName);
return "550 file not found, or no access.\r\n";
}
}
//Directory Listing
private bool ListDirectory(string rootDirOnSystem,string PresentDirOnFTP ,ref NetworkStream nw)
{
//Open the Directory
string strPath=rootDirOnSystem + PresentDirOnFTP;
string strFileNameTemp="";
Directory oDir=new Directory(strPath);
File[] oFiles=oDir.GetFiles();
Directory[] oDirectories= oDir.GetDirectories();
try
{
foreach(File oFile in oFiles)
{
string strFile;
strFile="-rwxr--r-- 1 owner group ";
try
{
if(oFile.Name.Substring(oFile.Name.Length-4)!=".SYS")
{
strFileNameTemp=oFile.Name.Replace(new String("\\").ToChar(),'/');
//strFileNameTemp=strFileNameTemp.Remove(0,strPath.Length);
strFile+= oFile.Length + " " + oFile.LastWriteTime.Format("MMM dd  yyyy",null).ToString() + " "  + strFileNameTemp.Trim() + "\r\n";
byte[] Buffer=Encoding.ASCII.GetBytes(strFile);
try
{
if(nw.CanWrite)
{
nw.Write(Buffer,0,Buffer.Length);
}
}
catch(Exception e)
{

}
}
}
catch(Exception e)
{
//Some Error in Reading the Files Information
}
}
foreach(Directory od in oDirectories)
{
string strDirectory;
strDirectory ="drwxr-xr-x 1 owner group ";
if(od.IsDirectory)
{
strFileNameTemp=od.Name.Replace(new String("\\").ToChar(),'/');
//strFileNameTemp=strFileNameTemp.Remove(0,strPath.Length);
strDirectory+="  0  " + "  " + od.CreationTime.Format("MMM dd  yyyy",null).ToString() + "  " + strFileNameTemp.Trim() +  "\r\n";
byte[] Buffer=Encoding.ASCII.GetBytes(strDirectory);
try
{
if(nw.CanWrite)
{
nw.Write(Buffer,0,Buffer.Length);
}
}
catch(Exception e)
{

}
}
}
}
catch(IOException e)
{
Console.ClientConnect(ClientID,e.ToString());
return false;
}
return true;
}
//Check For the MODE Passive or Port
private NetworkStream Mode(bool PassiveMode,ref TCPClient client,ref Socket clientSocket,string strIP,int Port)
{
Thread oThread=Thread.CurrentThread;
NetworkStream nw=null;
lock (oThread)
{
if(PassiveMode)
{
//Socket is Opened
if (clientSocket!=null)
{
nw=new NetworkStream(clientSocket,FileAccess.ReadWrite);
}
}
else
{
//Client Need to be Connected
client=new TCPClient(strIP,Port);
nw=client.GetStream();
}
}
return nw;
}
//Read Message from Network Stream
private string ReadMsgFromBuffer(ref Socket clientSocket,ref NetworkStream inBuffer)
{
string clientMsg="";
StringBuilder clientTmp=new StringBuilder();
byte[] buffer=new Byte[1024];
int iBytes=0;
//inBuffer.Flush();
Thread oThread=Thread.CurrentThread;
lock(oThread)
{
string tmp="";
/*
iBytes=inBuffer.Read(buffer,0,buffer.Length);
tmp=Encoding.ASCII.GetString(buffer,0,iBytes);
clientTmp.Append(tmp);
*/
if(clientSocket.Available > 0)
{
while(clientSocket.Available>0)
{
iBytes=inBuffer.Read(buffer,0,buffer.Length);
tmp=Encoding.ASCII.GetString(buffer,0,iBytes);
clientTmp.Append(tmp);
}
}
clientMsg=clientTmp.ToString();

return clientMsg;
}
//Send Message through Network Stream
private void SendMsg(string msg,ref NetworkStream outBuffer)
{
Thread oThread=Thread.CurrentThread;
lock(oThread)
{
byte[] buffer;
buffer=Encoding.ASCII.GetBytes(msg);
outBuffer.Write(buffer,0,buffer.Length);
}
}

//Read Data from File and Send to the Client
private bool SendFile(string strpath,ref NetworkStream nw)
{

Thread oThread=Thread.CurrentThread;
try
{
lock(oThread)
{
StreamReader outFile=new StreamReader(strpath);

char[] buff=new Char[1024];
int amount;
while((amount = outFile.Read(buff,0,1024)) != 0)
{       
byte[] buffer = Encoding.ASCII.GetBytes(buff);
nw.Write(buffer,0,amount);
}
}
}
catch( Exception e )
{
Console.ClientConnect(ClientID,e.ToString());
nw.Close();
return false;

nw.Close();
return true;
}

//Write Data to File and Send to the Client
private bool CreateFile(string strpath,ref NetworkStream nw)
{
Thread oThread=Thread.CurrentThread;
lock(oThread)
{
try
{
StreamWriter inFile=new StreamWriter(strpath);
byte[] buffer=new Byte[128];
int iBytes=1;
while(iBytes != 0)
{
string tmp="";
iBytes=nw.Read(buffer,0,buffer.Length);
char[] buff=Encoding.ASCII.GetChars(buffer);
inFile.Write(buff,0,buff.Length);
}
inFile.Close();
}
catch(Exception e )
{
nw.Close();
return false;
}
nw.Close();
return true;
}
}

//Passive Data MODE
private int PassiveModePort(ref TCPListener clientDataListner)
{
Thread oThread = Thread.CurrentThread;
lock(oThread)
{
int intPort=0; 
bool done=true;
while (done)
{
intPort=Port();
try
{
if(clientDataListner!=null)
{
clientDataListner.Stop();
}
clientDataListner=new TCPListener(intPort);
clientDataListner.Start();
//This Port is free
done=false;
}
catch (Exception e)
{
//done=false;
}
}
return intPort;
/*
strIPAddress = CStr(wscControl.LocalIP)
strSend = "PORT " & Replace(strIPAddress, ".", ",")
strSend = strSend & "," & intPort \ 256 & "," & (intPort Mod 256)
strSend = strSend & vbCrLf
wscControl.SendData strSend
*/
}
}

//Passive Mode Data Transfer Listner.
private Socket PassiveClientSocket(ref TCPListener clientDataListner,int intPort)
{
Thread oThread=Thread.CurrentThread;
lock(oThread)
{
try
{
if(clientDataListner.LocalEndpoint==null)
{
bool done=false;
Socket s=null;
try
{
s= clientDataListner.Accept();
done=true;
}
catch(Exception e)
{

}
return s;
}
else
{
Socket s= clientDataListner.Accept();
return s;
}
}
catch(Exception e)
{
Console.ClientConnect(ClientID,e.StackTrace);
}
return null;
}
}
//Get Free Port Numeber from Operating System
private int Port()
{
if(intPort==0)
{
  intPort = 1100;

else
{
intPort++;
}
return  intPort;
}
//Process PORT Command and get the IP and Port to Connect 
//for Data Transfer
private void PortData(string clientMsg,out int Port,out string strIP)
{
Thread oThread=Thread.CurrentThread;
lock (oThread)
{
//string strDataAddress = clientMsg.Replace(',', '.', 1, 3);
Port=0;
//Remove the FTP Command
clientMsg=clientMsg.Remove(0,5);
//Remove the last two character
clientMsg=clientMsg.Substring(0,clientMsg.Length-2);
int iLen =clientMsg.Length;
int iCounter=0;
StringBuilder IP=new StringBuilder();
string clientPort="";
for(int i=0;i<iLen;i++)
{
if (clientMsg.Substring(i,1)==",")
{
iCounter++;
if(iCounter==4)
{
clientPort=clientMsg.Substring(i+1);
break;

else
{
IP.Append(clientMsg.Substring(i,1));
}
}
else
{
IP.Append(clientMsg.Substring(i,1));
}
}
//IP of the Client
strIP=IP.ToString().Replace(',','.');
string[] strPort=clientPort.Split(new Char[]{','});
if (strPort.Length>0)
{
Port =(int)(strPort[0].ToDecimal() * 256 + strPort[1].ToDecimal());
}
/*
iPos = InStr(1, strDataAddress, ",")
strIP = Left$(strDataAddress, iPos - 1)
lPort = CLng(Mid$(strDataAddress, iPos + 1, InStr(iPos + 1, strDataAddress, ",") - iPos))
lPort = lPort * 256
lPort = lPort + CLng(Mid$(strDataAddress, InStrRev(strDataAddress, ",") + 1))
     */
}
}
    }
}
都发了!
谢了~~~
cforce()大哥留个联系方式,好吗?
我也要,有没有来晚呀,谢谢

icemxh@263.net
我也要 cmuwyb@21cn.com.
没有来晚吧!
众投资金:改变了移动游戏开发的一切一切 这些科技产品和革新或在今年“横空出世”?! 现代Objective-C七宗罪 Google工程总监Ray Kurzweil意欲打造“虚拟朋友” 惠普开源JavaScript框架Enyo更新:支持桌面和移动平台 分析:三星或将成为科技行业第五巨头 是真的 诺基亚真有可能推Android手机 如何打造IE10的指尖触碰式用户体验 SUSE全球OEM联盟总监:为何SAP HANA只选择SUSE? 推荐2013年最佳PHP开发框架 Patrick Wyatt:代码没问题 程序却有bug? NoSQL的可靠性及扩展操作 最新Skype加密技术:“无声”通话能躲过FBI监听 谷歌锁死SDK,能阻止Android碎片化吗? KitCam团队专访:为应用做加法也能雄踞榜首 谷歌哭了:Replicant 4.0 SDK发布搅乱大局 忍者神龟与禅宗启示:如何突破移动广告困境 Linux会是更好的游戏平台?暴雪是这么认为的! 新型恶意软件瞄准Java服务器 AWS被纳为“战略物资”市值或可达到300亿美元? 十张图带你入门Map/Reduce 低端Android野心,Intel发布Atom Z2420处理器 淘宝网的技术发展史(一)——个人网站时代 看Pinterest如何通过架构变化将EC2成本降低了62% 内容vs渠道:法国电信商Free叫板Google 让网站成为应用:Firefox OS掀起革命风潮 屌丝伞兵的逆袭:4人+盛大+远程+最佳手游 新年头彩:Chartboost喜获1900万美元融资 高富帅跻身移动领域 福特开放车载声控API 传低端iPhone最低只要99美元 你怎么看? 辉煌不再 Encanto超级计算机可能被拆分“出售” delphi中怎么编写中断,获取外部设备传来的信息?急救!! 数值模拟与计算仿真,高手请帮忙! 请问:dos下图形放大算法或思路?还有.........(高手请进) 求教!!!!SOS!! --请问如何将一个BMP图形文件转成JPG图形文件,高分请教师--- 高分给出,win98的怪问题! 打印统计问题 请教 : html的javascript 中报错:document.Form1.client_name.value不是对象 VC++里面如何从文本文件中一行一行读取文件? 请问,如何用mail函数批量发送邮件.多谢. 各位请教一下,Jsp 的服务resin在win2000下是怎样配置的 各位兄弟: 有谁知道 侯杰 的 <多线程程序设计> 什么时候才能买到??? 哪里有VFP3.0下载? system.ini和win.ini的作用 怎样生成安装包,多谢! 如何在两个不同的应用程序之间拖动文本字符 请问,PTSTR 和 PSTR 有什么不同? 反对上海电信变相涨价的行为。我能不能告中国电信“违约”和“欺诈”呢。 求救!误删Office2000注册表! 生成.exe出错 在Excel中,如何让某些行不能滚动? 在--成都--程序员能拿多少--¥--???? 换了17寸纯平显示器,开心,放分. 错装PB7,不能无create datawindows的图标,全是XX,为什么? 请问怎样遍历一个页面中服务器端的所有对象? 能否跟我说说——自动控制方面——与delphi编程的基本常识?我一直想了解,但不知道我们编的程序如何去跟那些硬件搞在一起而且控制硬件呢? 程序出错 发现一个不错的网站!www.ffboy.com 兩個Recordset之間數据轉入和轉出問題???. 高手請進......(一定給分) 大家推荐一下 ,win2k 下的 XML 编辑器。 请问男女之间存不存在真正的友情? 请教一下,怎样打印 java applet绘出的图形?,要用java 编写 高手请进!!!关于数据库 很菜的问题!字符串转化的问题? 最近运行D盘时,出来"找不到该路径..."的对话框,是什么原因? 指针数组定义的问题 我想截获tcp包,问从何下手,大鸟们 快来帮忙 远程数据传输问题:不同地域,不同系统间的数据传送有什么好方法? 急!!!(原谅我的无知) DELPHI怎么联接Access数据库!!!BDE ADO都可以!!!! 求安装制作软件 请问进行OpenGL编程除了VC和C++BUILDER外,还有什么工具可用?????? 请教一下,怎样在jsp中捕获 java applet 的按钮事件 一道填空题,大家看一看呀 小弟对现公司特别反感,很想换个学习环境比较好一点的,但是公司又要叫我签下一年的合同,我真是难办。 关于扩展名为.DAT文件的问题。 himen.sys文件的作用? 给SQL2000存储过程批量加密? 如何定义一个和Excel内嵌函数一样的用户自定义函数? 如何用DELPHI扫描所有硬盘的所有文件 老生常谈的一个问题?qq上mm问:“你张的帅么?“怎样回答最好呀!!! 中国一些节日的英文说法 细菌按形状可分为(),()和()? 当月球走到什么位置时开始发生月食说下,简略 谁知道各类节日的英文说法全一点 细菌有哪几种形态? 月食都发生在圆月之夜对吗30秒之内回答出来 各个节日的英语说法每个节日 铁细菌是什么形状的 物理电功率计算题 1、一个电灯泡在2s内电流做功 w2、功率为500w的电饭锅工作3h消耗的电能为 kw*h3、一个500w的电烤箱工作 h消耗一度电,而一度电可供100w的灯工作 h4、红绿灯,每盏灯都有220v、10 节日的说法Thanksgiving ,Halloween ,New Year'Eve ,Spring Festival 等节日前加什么介词? 细菌有()、()和()状等不同形状,有些细菌相连接成().但每个细菌都能()生活. 一个小灯泡正常发光时电压2.5v电流一分钟做功1.75焦耳求电流额定功率.如电压2v电功率 16.在爆破中,若导火线的燃烧速度为0.8cm/s,人跑步的速度为5m/s.(1)当导火线长度为40cm时,从点燃导火线到爆炸,人最多能跑多远?(2)若安全区离爆破点有300m,那么导火线最短取多少才安全?过 一个高数求导问题求大神解答!希望能写在纸上拍下来发给我会加分就是求括号里面的那个的导数就行了, 不用管左边的e 设X的概率密度为f(x)={2x,0 隐函数求导现在就卡在一点上:例如x^2 + y^2 = 1,我看其中对y^2的求导是2yy',这是咋来的呢?2y后面为什么乘以y'或者为什么不是2y',我看有人说好像是链规则,这是? 常用的静态图象文件有几种格式?分别具有哪些特点? 设X~N(0,1),求Y=2X^2+1的概率密度RT 有这样子的花吗 求导,为什么 d(y^5)/dx 会等于 d(y^5)/dy · dy/dx 一个40W的电灯泡表示的物理意义 花朵分为哪几种形态 高数,如何证明反函数二阶导d(1/y')/dx=-y''/(y')^2如题 电功的物理意义是什么RT 请问这几种分别是什么花(草)?请教一下这俩照片里从上到下分别是什么花? 是在同一个花坛照的 已知y=y(x)的导数y',y‘’存在,且y=y(x)的反函数为x=x(y),试用y',y''表示(d^2x)/dx^2 —(y'')/(y')^3 月食大约在几月 在50秒内,通过某导体的电荷量是10库仑,电流做工60焦耳,则通过该导体的电流是多少安培?导体两...在50秒内,通过某导体的电荷量是10库仑,电流做工60焦耳,则通过该导体的电流是多少安培?导体 推荐几种鲜花?送一个冷艳,知性的女生.想送的有品味一些.哪些花适合她的特点? 女人体型分为哪几种 月球上的环形山是怎样形成的? 亲戚送一个花篮,请问这几种是什么花? 旗袍款式分为哪几种 月球为什么有环形山? 一辆功率为45kw的汽车,以72KM/h的速度在平直公路上匀速行驶30km,求汽车受到的阻力是多大?汽车所做的功 轮廓标分为几种,我要详细的. 月球上的环形山是怎么形成的? 一道高数题,分段函数求导,分段函数f(x) =[φ(x) - cos x]/x x=/=0a x=01.求常数a的值 ,使f(x) 在 x=0 处连续;2.求f'(x).这道题的1.lim(x->0)f(x) = lim(x->0) (φ(x) - cos x )/x =然後...为甚麼要一定要用洛必达法则?而 肥胖分为不同体型的种类有哪几种呢? 电量的单位是库仑,为什么在电池上标的都是毫安? 乳房的形状分哪几种形状? 物理题求详解...汽车发动机的功率为60kW,汽车的质量为4t,当它行驶在坡度为0.02的长直公路上时汽车发动机的功率为60kW,汽车的质量为4t,当它行驶在坡度为0.02的长直公路上时,所受阻力为车重的 库仑是什么单位 乳房的形状有几种?我的乳房看起来尖尖的,而我看有一些女人是圆圆的.为什么乳房形状会不一样呢?乳房的形状总共有几种? 最近一次月食在几月几日 高数函数求导问题现有一函数f(x),当x=0时其值为0,当x不为0时其值为为e^1/(-x*x),求f(x)在x=0处的导数.怎么求的? 乳房都有哪几种形状 最近的一场月食是在几月几号 为什么月亮上有许多环形山? 乳头的形状有几种 谁能告诉我最近的月食是在几月几日的几点? 月球环形山形成的原因是什么? 乳房什么形状好看 2008年有没有月食?几月几日? 一辆汽车正以36km/h的速度做匀速直线运动,已知发动机的功率是60kw,求这辆汽车所受的阻力是多少? 定积分求导如 ∫(上a下b)f(x)dx 求导 2010年1月1日的几点几分有月食发生,那后面到什么时候又会有? 高数多元函数求导其实是一个有点白的问题就是,什么时候用dy/dx,什么的时候用ay/ax?我觉得没什么差别啊,为什么书上一会用这个一会用那个~~ 细菌的样子 设随机变量 X,Y 相互独立,且服从[0,1]上的均匀分布,求X+Y 的概率密度参考答案是这么写的.让我不明白的是最后x,y取值有两种情况的依据是什么,又为什么如此划分区间呢?求详细说明(最后描红
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn