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

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

编辑:说三道四文库 发布时间:2017-08-21 09:58
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.
没有来晚吧!
新时代应用程序设计及MongoDB的十个深入理解 借助“开源”东风 英特尔打造卓越“软实力” 深圳综合交通设计研究院张鹍鹏:智能交通设备领域已成红海 信息化是发展趋势 25个可遇不可求的jQuery插件 Web设计中对视差设计的误区 直接拿来用,九个超实用的PHP代码片段(二) 一周消息树:小米染指平板电脑凶多吉少 移动周报:Xcode 5.1更新、CarPlay揭秘,Apple很忙 可穿戴领域,创业公司的掘金点?还是滑铁卢? 搜狐SendCloud2014运维技术沙龙拉开帷幕 一周热点:选择Go语言的12个理由,九头蛇与大象之争 中国云计算大会PPT集萃(二):十位技术大牛分享平台打造技术 延迟250毫秒损失数百万美元,Hadoop系统该如何应对实时任务 IBM成立展示中心扩展大型主机的Linux开放生态系统 SDN解决方案总结:OpenFlow、虚拟机、OpenStack和VXLAN/NVGRE 第六届中国云计算大会将于5月20-23日在京隆重召开 大数据实战:站在JMP分析平台上的FIT足迹识别技术 首届SAP d-code大会在上海举办 【OSTC讲师专访】ZoomQuiet:因商业化而开源是中国开源界最大的囧处 亿元资金扶持+联手100家VC,腾讯的雄心壮志 美国史上最大IPO 能给阿里巴巴带来什么? 买Windows平板而非iPad或Android的十大理由 Framework7:不会Objective-C,也能开发iOS7应用 CocoaChina开发者大会 全新引擎Cocos 3d-x开源 Oracle和微软的抱团,以及对抗Amazon霸主的5个可用点 Agile已死 Agility长存? 论程序员的自我修炼 Github女员工因遭性别歧视离职 继七年iPhone、四年iPad后,苹果的下一城:Healthbook 普元CTO焦烈焱:专注于基础软件 在Spark上的深入实践 Python 3.4.0正式发布 未添加任何新语法特性 如何调用非托管DLL的函数。实现 200分紧急求助!!!!! 给Application的open事件添加脚本 在线等待 怎麼每次都會觸發自定義字段的change event? 求救高手!!!!!! 给Application的open事件添加脚本 VB学习资料?/ select語句怎麼寫? 关于构建工资管理系统的想法!请大家踊跃发言! 考,为什么?存储过程就这么麻烦吗? 请问各位高手怎样在toolbar的按钮上载入图片?谢谢 为什么介绍sql server的书都是跟ASP联系的,有没有跟delphi 联系的? session.timeout的设置问题 我是一个初学者,我有6个问题想请教大家!希望给一点帮助 请大家帮忙想一招,我是第一次做这样的问题,简直是不可思意,吓死我了 工资太低!工作难找?提议结成联盟 初学编程,请教个小问题 请问可不可以定义 vector<vector<mystruct>> 类型? 基于单片机的步进电动机的问题,在线给高分!!!!!!!!! 无法打开的文件 怎样判断某天所属的星期的星期一和星期天对应的日期分别是什么? 如何对DBEdit组件中输入的数进行类型检查??? 我的系统是2000 server,可是我在局域网的另一台机器上实现远程登陆 请大家谈谈.net java brew三种平台的优缺点。答者有分。 怎样判断某天所属的星期的星期一和星期天对应的日期分别是什么? 什么问题啊? 怎么样才能将开发手机游戏?? 调查:这里有没有程序员买有PDA的??比较高档的。比如康柏,sony等等 有2个程序有问题,请各位高手找出错误!先谢了! 奇怪,我的BLOWFISH加密算法每次使用同一个密钥加密同一个字符串的结果都不一样! 如何使PICTUREBOX中的底图能缩放,或者哪里有透明的容器控件?在线等。 如何判断鼠标离开了一个窗口的显示区 200分紧急求助! 明天(3月13日)是我一个朋友的生日,我们一起祝福他吧:) 请大家谈谈.net java brew三种平台的优缺点。答者有分。 急急急!!! 怎么配linux的dns服务阿? 有谁知道啊? 点击链接网页竟变成下载对话框,啥会事? title为什么显示不正常 哪里有VC.NET的电子书下载? 急!急!请解释一下 请高教~~建主页~~学校的 为什么我下载的j2ee.jar里没有EJBLocalHome和EJBLocalObject接口 如何让为windows 2000 sv 同时支持asp cgi php? 如何用QQ发送消息?高手帮忙! 關於算法的問題﹐ 大家來幫幫忙呀﹗ 用asp编程怎样验证用户登陆名和密码!怎样设置用户的使用权限!我用的是sqlserver2000数据库 安装dbgrideh 的问题。 我先杀你们,再杀自己,然后逃之夭夭---(无内容) 请高手帮忙:原本显示正常的图片现在不能显示了 电子跃迁到激发态后电子的轨道形状会改变吗 用手接触带电的验电器,验电器金属箔闭合的过种中,电荷是怎样移动的? 面很Q的Q是什么意思 水泥成品中CaO含量对水泥使用性能的影响? 曲线运动的轨迹夹在------和-----之间且总是朝着-----方向弯曲. 很Q的男孩是什么意思 关于西方经济学的思想,凯恩斯主张的是需求决定一切对吗?而新古典主义主张供给决定一切对吗?如题,不知道我说的对不对 为什么曲线运动的轨迹会夹在v与a之间?really? 100个以上成语接龙 水泥厂旋窑生产中,近期我厂石灰石品位低,生料配料石灰石钙含量只有42-44,如何配料 什么是轨道的弯曲方向曲线运动中加速度的方向与轨道的运动方向相同 我想问 什么是轨道的运动方向 train是什么意思? 凯恩斯学派的主要观点是什么? 为什么说硫化锌是较难焙烧的硫化物? train什么意思 水泥中的Cao含量对水泥有什么影响 ,其含量随存放时间有和变化 sio2和NaOH的反应方程式 SO2和氨水的 醋酸和氨水的 Ca(HC03)+HCL=? 怎么反应啊 train的意思 凯恩斯学派、货币主义和理性预期学派以及菲利普斯曲线的问题如何解答? 酸性氧化物和碱反应时反应速率最慢的二氧化碳通入氨水 二氧化硫通入澄清石灰水 二氧化硅投入烧碱中原因? Train的这句话啥意思啊..对于xx没得奖表示很开心 哈哈哈 下列关于细胞分化的叙述中,正确的是A、所有子细胞都能分化 B、细胞分化后形成形态和功能不同的细胞 C、细胞分化与细胞生长是独立进行的 D、细胞分化时,细胞核中出现了染色体 超Q有什么特权 train的意思什么各位会的大哥大姐们,快教教我啊! 下列关于细胞分化的叙述,正确的是A 种子形成幼苗与细胞的分裂和分化直接相关B 红细胞的形成与基因表达有关而与细胞分化无关C 胡萝卜叶肉细胞脱分化形成愈伤组织后不具有全能性D 癌细 超q是啥? 择族之长而贤者主其计如何翻译 下列有关细胞分化的叙述,正确的是问 应选哪个?为什么?/> 二战后欧洲、日本经济的发展对世界政治格局产生的影响 计其长曾不盈寸的盈什么意思? 下列关于细胞分化的叙述不正确的是A.细胞分化不使细胞数目增多B.分化的细胞会呈现出在形态,结构和功能上的差异C.细胞分化的结果是形成各种组织D.植物体形成的过程中,可以不进行细胞分 我办了超Q,是不是24小时都在线? 于彼计则得 翻译 下列有关细胞分化的叙述中,不正确的是( ).A.细胞分化不使细胞数目增加B.分化的细胞所呈现出的形态、结构和生理功能的变化,源于细胞内化学物质的改变C.细胞分化的方向在胚胎发育的早 GRE里面有V分数和Q分数~ 纳米二氧化钛与氟化氢在反应方程拜托各位大神纳米二氧化钛与氟化氢在反应方程和纳米二氧化钛在百分之五的氟化氢容易的中溶解度,知道的朋友别藏着大家分享下啊. 铝制品需要注意哪些? 三氧化二铝里面有二氧化硅怎么除去二氧化硅书上说用盐酸和氨水在过滤,具体怎么反应的 Q+啥意思 Q点是啥意思呢,. 氢氧化铝 氨水谁先和盐酸反应氢氧化铝 氨水,谁先和盐酸反应 利用整式乘法公式计算299的平方当a为整数时,多项式3a的平方-5a+1与多项式-2a的立方+3a的和一定是当a为整数时,多项式3a的平方-5a+1与多项式-2a的立方+3a的和一定是A、奇数B、偶数C、3的倍数D、 很Q是什么意义 I=q/t和a=v/t为什么是定义式? 赤壁之战的经过是什么急 道康宁待遇如何?我是一名中专生,快到了实习期了,我想了解一下松江道康宁公司的待遇如何,有没有住宿.还有:道康宁是世界500强企业吗?越详细越好,谢谢! Q=vq中v的意思 求十五个成语接龙(都是描写四季的),谁在第一时间答出来, 道康宁7091胶白色和灰色的性能有什么不同?还有该胶在高温下和在室温下那种固化时间短? (3)材料二反映了以法国为代表的欧洲在世界上地位的何种变化? 请问有时间吗?可以帮我看一下随机变量的数学题吗? 新自由主义经济学主要的流派的代表人物及其观点? T.V.X. 如果有人说你这人很Q 恒星碰上中子星.黑洞碰上恒星,恒星会被撕碎,吸进去.恒星碰上中子星呢,恒星会被撕碎?被吸过去,撞上中子星? 当力的方向与速度成锐角时,速度轨迹向哪弯曲以及垂直和成钝角时的情况. 如果有人说这人很Q是什么意思 鼠字开头的成语接龙鼠字开头,中间十个成语,年字结尾 质点是一个理想化的模型,实际并不存在这句话对吗 可是质点确实是一个实际存在的物体啊 求详解 谢拉 物体的质量为m,沿光滑的弯曲的轨道滑下,与弯曲轨道相接的圆轨道的半径为R,要使物体沿光滑圆轨道能通过最高点,物体应从离轨道最低处多高的地方由静止开始滑下?请给与详解, 温州被砍男童收到爱心款超35万 家人叙政府称:日内瓦会议旨在让总统下台则16秒26 温州17岁高二女生单手玩斯诺登谴责美英情报机构为“最恶劣的侵韩总统朴槿惠对朝言论引猜测 称可与金宁波轨道交通:逃票将纳入个人信用信息印度雄心勃勃探火星 英媒议论“与中国中印时隔5年再次联合军演 更多表达政浙医二院对抗菌药动真格 去年有医生被杭州正研究建设“城市风道” 引风进城李克强看望黑龙江受灾群众:不让一个群哥伦比亚一辆巴士坠崖 致13人死亡62013浙江·杭州国际人才交流与合作社会学家:27.6%户籍城镇化率证明“海龟”与“土鳖”结合 浙江发展关键孙杨无证驾驶后续 奥运冠军孙杨昨走进世界俄罗斯人民大会授予普京捍卫大国地多次违纪违规 孙杨被停赛停训停商业活新疆记者拍到中国首张高清雪豹捕食照片台“检察总长”黄世铭:一审有罪或遭弹网爆苍南一运管副所长驾豪车伤人逃逸 恩平“村霸”案再审撤销原判微信输“8”测肺活量?对“扫地僧”的追捧源自大师的稀缺黄圃宜必思推妇幼主题活动作为风景的饭店请你帮4位湖南籍烈士“找家”欧建涉黑案二审开庭,9名上诉人当庭翻深圳启动“全民阅读立法”蔬菜享五星待遇 菜农成“土豪”25日起,去大围山赏杜鹃请快提前预存电费闷热唱主角手持出行攻略 High翻五一吧“临武瓜农案”二审开庭 庭审全程网我省通报八起政法干警违纪违法案件功劳簿上躺不得五一搭乘高铁周边游五一汽车票预售至5月5日谁砸的车?我想与你握手言和商业周刊东区市民免费看电影学红歌
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘