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

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

编辑:说三道四文库 发布时间:2017-05-25 09:26
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.
没有来晚吧!
理解面向对象编程 -VB资料 VB利用GetCursorPos 读取滑鼠的座标 利用Visual Basic 关闭Windows9X或者Windows NT VB利用代码启动/关闭中文输入法 模拟一次鼠标事件 -VB资料 目前执行的是哪一国语言的 Windows -VB资料 VB判断剪贴板的所有可用格式 VB判断驱动器类型 VB判断是否已经建立 Dial Up 连接 VB判断一个年份是否为闰年 VB判断一个驱动器的类型 屏蔽文本框默认的右键菜单——浅谈如何控制Windows消息 -VB资料 奇数和偶数校验-VB资料 启动控制面板命令大全 -VB资料 VB取得 DOS 环境变量 VB取得并设置双击间隔时间 VB取得磁盘序列号、卷标和文件系统类型 VB取得短文件名 VB取得和设置计算机名 VB取得和设置系统颜色 VB取得计算机名 VB取得目前所有的输入法 VB取得应用所在的目录 趣味撞球——VB应用程序一例 缺省值和可选参数 -VB资料 确定当前 WIN95 的启动状态-VB资料 让TextBox的输入具备overwrite(覆盖)的功能 -VB资料 让密码轻松显示 -VB资料 让文本框输入完后,直接跳入下一行 -VB资料 VB如何编制带有不定个数参数的过程。 VB如何充分扩充VB功能 谁在??? 帮帮我啦。。~~~~~~~~~~ 急急急!! 请问MSDN里面所说的Video Capture函数和视频采集卡厂商所提供的SDK有什么不同了?在线等候。。 怎样使网页(IE)上选择的文字能够拖动到BCB程序中?(400分赐教,决不食言) 调查:你是共享软件作者吗........ 急需帮忙!!! 编程,怎能支持少数名组语言 到底在linux那里是用什么命令解压zip文档的?各位高手告诉我!! 已计算的子表单 DBGrid怎样实现0值不显示? 8月25日 0:23 论坛在线名单(462人)!好多人呀!不知道有在公司加班的吗? 在pb中 除了odbc和专有数据库连接 还有其他方式的连接方式吗 调查:你是共享软件作者吗........ 为什么总是提醒我“服务器繁忙,请稍候再试。”CSDN在搞什么鬼?今天遇到好多次了!:( 工作区中的一个简单的问题 picture控件是不是没有双击消息? msdn示例程序,你们是否都看得懂呢? 你用了Delphi7吗,感觉如何? 同学十一结婚,想做个flash之类的东东作礼物,哪位能指导一下,时间不多啦,帮帮忙 SCO UNIX认证好考吗?特别指UnixWare 7的系统管理员。知道情况的跟俺讲讲。 兼职做一个库存进销软件,大概能得多少钱 同学十一结婚,想做个flash之类的东东作礼物,哪位能指导一下,时间不多啦,帮帮忙 怎样刷新页面的某一部分,而不是全部刷新? 请问用2000Server做磁盘镜像是不是一定要求硬件有RAID功能? 个人编写软件,需要用到版本控制吗? 关于资源文件中的对话框。 APACHE出错 我的问题可能会让大家反感!!(在线等待) 请问用2000Server做磁盘镜像是不是一定要求硬件有RAID功能? 请问用2000Server做磁盘镜像是不是一定要求硬件有RAID功能? 如何接收 用 CreateObject 函数创建对象的事件 请问用2000Server做磁盘镜像是不是一定要求硬件有RAID功能? 编程的困惑 BCB_FANS(四大名捕之追杀令) 请进!送分! 请问用vb,vc,delpy,c++ buildle编写的知名软件各有哪些?(不包括for .NET) 国家四级与中程,孰难!! 请问用vb,vc,delpy,c++ buildle编写的知名软件各有哪些?(不包括for .NET) 调查:什么时候想准备结婚?(单超的也可发表意见) 这里有贵州考高程的人吗? 请问用vb,vc,delpy,c++ buildle编写的知名软件各有哪些?(不包括for .NET) 寻软件高手!现有一IP地址和网页、搜索栏关键词拦截程序需要编写,付酬!!! 没声问题 请问在SQL2000中使用中文字段名对性能影响有多大? 请问用vb,vc,delpy,c++ buildle编写的知名软件各有哪些?(不包括for .NET) 启动设置与连接??? 200分求解决用LQ-300K打印商场的收银单纸张设置的难题 请教! 启动用户密码忘了和设置启动项??? 新手上路---------大家是怎么学SQL server的 什么是pascal类的字符串?什么是以NULL结尾的字符串? 哪里有微软认证 MCSE7门课的官方原版教材(英文版)下载? 深夜了,看看CSDN的人气有多旺,在线的请你顶一下。 1700w的烤箱需要多少电?需要三相电吗? 1.3克的氢氧化钠可用22摩尔0.5摩尔每升的硫酸完全中和,试计算氢氧化钠的纯度!咋算! 车内饰塑料被烤焦怎么处理 配制250mL1.0mol/L硫酸溶液,需要18mol/L硫酸溶液的体积是多少? 如图,一根电线杆AB直立于地面,拉线AC=6m,拉线底端C与电线杆底端B的距离为3m,求电线杆AB的高度. 汽车内饰塑料哪个地方是ABS塑料? 口腔为什么会一直分泌唾液?最近生活压力比较大,嘴巴里就一直分泌唾液,咽下去还会分泌,有时候睡觉也会流出来,附近的人听见我在咽都觉得恶心不咽又很难受,总是有大口的口水,现在都成了 如图,一根电线杆AB直立于地面,拉线AC=6m,拉线底端C与电线杆底端B的距离为3m,求电线杆AB的高度. 如何分离汽车内饰的ABS塑料与面皮革? 一道面试智力题,船上有N个人,船被海盗劫了,海盗给出一个数字K,让所有人站一排并逐个报数,报到K的被扔下海,然后下一位从1开始报数,报到K的再被扔下海,如此反复直到所有人都被扔下海.求 要配制153.36mmol/L(镁离子计)水溶液,需要硫酸镁多少克?详细的计算公式, 取2支试管,1号试管加2ml稀释的浆糊、2ml唾液,2号试管加2ml稀释的浆糊、2ml的清水,分别向两支试管中各滴加 氢气当作还原剂 活泼性氢气当作还原剂不用考虑金属活泼性吗?比如铁比氢活泼而还原铁的时候:Fe2O3+3H2 _高温_ 2Fe+3H2O 请问要配制13.36mmol/L(镁离子计)水溶液,需要硫酸镁多少克 详细的计算公式呢? 已知长方形的长为√6cm.宽为(√3-1)cm.则这个长方形的面积为多少cm² 氢气还原氧化铁中氢气是还原剂吗 要配制153.36mmol/L(镁离子计)水溶液,需要硫酸镁多少克 饱和脂肪酸容易让人发胖还是不饱和脂肪酸容易让人发胖? 函数f(x)是偶函数,且X>=0是增函数当1\2 [紧急求助]要配制13.36mmol/L(镁离子计)水溶液,需要硫酸镁多少克 穷人蒲松龄 1、本文题为“穷人蒲松龄”,读完全文,说说蒲松龄的穷表现在哪些方面.2、文中画线句子引用郭沫若的话有何作用?3、作者说蒲松龄是不幸的,又说他是幸运的,这是否矛盾,为什么?4 孕妇能不能吃菠菜 A 1、2号试管均有浆糊;B 1号加水,2号加振荡后唾液;C 将两个都放入37℃水中十分钟后拿出;D 均加碘液两滴1.以上实验是观察()酶对()的消化作用2.经过上述实验过程,D组 2号试管中浆糊 不饱和脂肪酸会胖么 菠菜为什么不能吃了 鸟蛋怎么孵?我刚刚掏了一个鸟窝,这鸟窝在我家房檐下,刚好房檐要拆了,但是里面有一小鸟蛋,怎么把它孵出来?别喷我,我绝对不是故意的,没办法,房顶要从新盖,具体怎么办? 减肥不饱和脂肪酸 怎样求120,80,100的最小公倍数?要祥戏过陈 怎样自己孵鸟蛋?我在游玩的时候捡到一只刚生下来的鸟蛋,棕色的,小小的.我现在把它天天拿着保温 ,不过有时候我没时间照顾它,它都是冰凉的.已经一个星期了,我不知道它是否还活着,还想请 自制的小礼物分别放在20个长30cm,宽15cm,高10cm的长方体盒子里,并用包装绳扎好,接头处用绳子26cm?这些盒子用30cm的绳子包扎好, 如题.1000ML 80%的浓硫酸调成30%稀硫酸需要加多少ML的水! 已知某个三角形的周长为2x²cm又知其中两边长分别是(2x+1)cm,(x²-2x+1)cm已知某个三角形的周长为2x²cm,又知其中两边长分别是(2x+1)cm,(x²-2x+1)cm,则这个三角形第三 如图,在△ABC中,CD;BE分别是AB;AC边上的中线,延长CD到F,使FD=CD,延长BE到G,使EG=BE.(1):AF与AG有什么数量关系?证明你的结论.(2):F、A、G三点有怎么样的位置关系?证明你的结论. 化学反应的速率与限度 一个直角三角形的两条直角边的边长是质数,和是91,这个三角形的面积是什么 长为50cm,宽为30cm,高为15cm长方体的盒子能放几个直径为6cm高为12cm的圆柱体 已知集合A={y|y=log2x,x>1},B={y|y=(1/2)^x,x>1},则A∩B为什么不是{y|0<y<1}而是{y|0<y<1/2}详细解答...... 已知直角三角形两直角边比值为1:10斜边长104.9 求两条直角边数据 一个长30cm,宽15cm,高10cm的长方体,四周用一根金丝带捆扎,接头处长25cm,捆扎这个盒子至少要多长的金丝 设全集U=P,集合A={y|y=2^x(x-2),x属于R},B={x|y=根号下log1/2 (1-x),x属于R} ,求(CuA)交B 已知一个三角形的两边长分别为7cm、1cm,它的第三边为一个整数,求这个三角形的周长,并指出这个三角形的形状.(要详细的解答过程,不要单独一个答案) 碳酸氢盐都是无机物吗RT 分解因式 x^3-7x+6 塑料PT耐温度我买了个杯子,看一下杯底写着Ps 6.我想问下这杯可以装热水不? 碳酸盐,碳酸氢盐都是无机物吗? 分解因式:x^6-7x^3+12 五斗米是什么意思 跪求解释这篆刻上的四个是虾米字? 分解因式X^3-7X+6 设计一个简单实验验证CO2与NaOH溶液反应生成的新物质 实验现象 实验结论 求大神指导,这虾米意思啊 400瓦的电烤炉用一个小时大概要用多少度电? 为了证实CO2与NAOH溶液已反应,同学设计下列实验验证:1.取实验后的溶液,滴加(),现象为();2.取实验后的溶液,滴加(),现象为();《两种方法》 偶哈哟苦依吗死带 这是虾米意思? 1500w烤箱一小时用多少度电 把一段铁丝变为等边三角形和正方形.三角形的边长是(3分之1×a²+3分之1×b²+3)cm 正方形边长(2分之3×a+b-1)cm 求该铁丝长.分解因式(4a²+1)²-16a² 若集合A={X|0<X<根号2},B={X|1≤X≤2}则A∩B= A∪B= 俗语说:“家有半斗粮、不当孩子王”.你为什么选择教师职业? 浆糊怎么做? 强碱溶液加水稀释,氢离子浓度升高,其它降低 为什么我知道 是氢氧根浓度减小,k是定值 所以氢离子浓度增大但用越稀越电离怎么解释
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘