⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 java 实现pop3 server.txt

📁 含有许多JAVA的技巧!
💻 TXT
字号:
java 实现pop3 server 
(加入日期:2001-4-24 点击数:957)
【对此文发表评论】 【编程爱好者论坛】 【保存文章至硬盘】 【打印文章】 
 
本人公布此程序希望能给热爱JAVA的朋友一点帮助!! 
如大家有什么不明白的地方可以询问 
//write --1998.6 

import java.net.*;   
import java.util.*;   

public class pop3server{   
private static final int SERVER_PORT=110;   
private static final int MAX_CLIENT=500;   
private ServerSocket listenSocket=null;   
private boolean keeprunning=true;   
private InetAddress ip;   
public static void main(String[] args){   
pop3server server=new pop3server();   
server.impserver();   
}   
public void impserver(){   
Socket clientSocket=null;   
try{   
while(keeprunning){   
clientSocket=listenSocket.accept();   
int numThreads=Thread.activeCount();   
System.out.println(numThreads);   
manageconnection newhandle=new manageconnection(clientSocket);   
Thread newhandlethread=new Thread(newhandle);   
newhandlethread.start();   
System.out.println("hello");   

}   
}   
catch(IOException excpt){   
System.err.println("Sorry ,Failed I/O:"+excpt);   
}   

}   

public pop3server()   
{   
try{   
listenSocket=new ServerSocket(SERVER_PORT,MAX_CLIENT);   
}catch(IOException excpt){   
System.err.println("SOrry to open port "+SERVER_PORT+":"+excpt);   
System.exit(1);   
}   
}   
}   

/*follow is manage and process command class*/   

class manageconnection implements Runnable{   
private static final boolean AUTOFLUSH=true;   
private Socket mySocket=null;   
private PrintWriter out=null;   
private BufferedReader in=null;   
private boolean checkedpass=false;   
private int msgnum=0;   
private long[] msgsize=new long[100];   
private long totalsize=0;   
private String username=null;   
public manageconnection(Socket newSocket){   
mySocket=newSocket;   
}   
public void run(){   
String nextline=null;   
String password;   
int check=0;   
int strlen;   
String content="Subject:hello";   
String command=null;   
String auth_user="user";   
String arg1;   
int arg2=0;   
String arg3;   
int i=0;   
int count=0;   
int time=0;   
try{Thread.currentThread().sleep(10);   
}catch(Exception e){   
System.out.println(e);   
}   
try{   
mySocket.setTcpNoDelay(true);   
time=mySocket.getSoTimeout();   
}catch(SocketException excpt){   
System.out.println(excpt);   
}   
try{   
out=new PrintWriter(mySocket.getOutputStream(),AUTOFLUSH);   
in=new BufferedReader(new InputStreamReader(mySocket.getInputStream()) 
   
);   
/*System.out.println("hello thread1");*/   
out.println("+OK"+" TianHua's pop3 server");   
try{   
while(true){   
if(check!=3){   
try{   
nextline=in.readLine();}catch(Exception excpt){   
System.out.println("sorry:"+excpt);   
break;   
}   
System.out.println(count+" "+nextline);   

if(nextline.length()<4){ 
out.println("-ERR"); 
}else{ 
command=nextline.substring(0,4); 
if(command.equalsIgnoreCase("user")){ 
i=1; 
} 
if(command.equalsIgnoreCase("pass")){ 
i=2; 
} 
if(command.equalsIgnoreCase("stat")){ 
i=3; 
} 
if(command.equalsIgnoreCase("quit")){ 
i=4; 
} 
if(command.equalsIgnoreCase("list")){ 
i=5; 
} 
if(command.equalsIgnoreCase("retr")){ 
i=6; 
} 
if(command.equalsIgnoreCase("dele")){ 
i=7; 
} 

switch(i){ 
case 1:if(check==0){ 
check=1; 
if(nextline.length()<5){ 
out.println("-ERR"); 
}else{arg1=nextline.substring(5); 
username=arg1; 
out.println("+OK"); 
} 
}else{out.println("-ERR");} 
i=0; 
break; 
case 2:if(check==1){ 
if(nextline.length()<5){ 
out.println("-ERR"); 
}else{ 
arg1=nextline.substring(5); 
password=arg1; 
if(check(username,password)=='1'){ 
check=2; 
/*msgnum=readmail(username);*/ 
out.println("+OK");}else{ 
out.println("-ERR"+" sorry auth failed"); 
check=0;} 
} 
}else{out.println("-ERR");} 
i=0; 
break; 
case 3:if(check==2){ 
msgnum=readmail(username); 
out.println("+OK"+" "+msgnum+" "+totalsize); 
}else{ 
out.println("-ERR"); 
} 
i=0; 
break; 
case 4:out.println("+OK BYE BYE welcome to TianHua's Mail System next 

time"); 
check=3; 
i=0; 
break; 
case 5:if(check==2){ 
out.println("+OK"); 
out.println(msgnum+" "+totalsize); 
int ii,iii=0; 
for(ii=1;ii<=msgnum;ii++){ 
out.println(ii+" "+msgsize[iii]); 
iii++; 
} 
out.println("."); 
}else{ 
out.println("-ERR"); 
} 
i=0; 
break; 
case 6:if(check==2){ 
if(nextline.length()<5){ 
out.println("-ERR"); 
}else{ 
arg1=nextline.substring(5); 
out.println("+OK"); 
System.out.println(arg1); 
printmail(Integer.parseInt(arg1),username); 
out.print("\r\n"); 
out.print("."); 
out.print("\r\n"); 
boolean st=out.checkError(); 
System.out.println(st); 
/*if(nextline.length()<6){ 
out.println("-ERR"); 
}else{ 
try{ 
arg2=Integer.parseInt(nextline.substring(5)); 
}catch(NumberFormatException except) 
{ 
out.println("-ERR"); 
break; 
} 
if(msgnum==0){ 
out.println("-ERR no msg retrived"); 
} 
if(arg2<=msgnum){ 
out.println("+OK"); 
out.println(content); 
out.println(""); 
out.print("."); 
out.println(); 
out.println("."); 
System.out.println("msg finished"); 
}else{ 
out.println("no such msg"); 
} 
}*/ 
} 
}else{out.println("-ERR"); 
} 
i=0; 
System.out.println("retr finished"); 
break; 
case 7:if(check==2){ 
out.println("+OK"); 
}else{ 
out.println("-ERR"); 
} 
i=0; 
break; 
default:out.println("-ERR"); 
i=0; 
break; 


} 
} 
}else{ 
out.close(); 
in.close(); 
mySocket.close(); 
break; 
} 

} 
}catch(NullPointerException excpt){ 
System.out.println("sorry "+excpt); 
in.close(); 
out.close(); 
mySocket.close(); 
} 

}catch(IOException excpt){ 
System.err.println("Failed I/O:"+excpt); 
} 

System.out.println("bye"); 

} 
private void printmail(int msgnumber,String uname){ 
String msgdir="/webmail/userinfo/"; 
String msgfile=msgdir+uname+"/"+Integer.toString(msgnumber); 
System.out.println(msgfile); 
long filepoint=0; 
try{ 
RandomAccessFile file=new RandomAccessFile(msgfile,"r"); 
long msglength=file.length(); 
while(filepoint<msglength){ 
String s=file.readLine(); 
out.println(s); 
try{ 
Thread.currentThread().sleep(5); 
}catch(Exception e){ 
System.out.println(e); 
} 
filepoint=file.getFilePointer(); 
} 
}catch(Exception e){ 
System.out.println(e); 
} 

} 


/*check your username and password*/ 
private char check(String user,String pass){ 
String[] arg=new String[2]; 
int c=0; 
char value='0'; 
arg[0]="uname="+user; 
arg[1]="pass="+pass; 

try{ 

Process child=Runtime.getRuntime().exec("/disk2/ftp/pub/login" 

,arg); 
InputStream inn =child.getInputStream(); 
while((c=inn.read())!=-1){ 
value=(char)c; 
} 
inn.close(); 

try{child.waitFor();}catch(InterruptedException e){ 

e.printStackTrace(); 
} 

}catch(IOException e){ 
System.err.println(e); 
} 
return value; 

} 


private int readmail(String uname){ 
String[] arg=new String[1]; 
arg[0]="username="+uname; 
int[] msg=new int[3]; 
int i=0,j=0; 
int msgnum=0; 
int c; 
try{ 
Process child=Runtime.getRuntime().exec("/disk2/ftp/pub/readmail", 

arg); 
InputStream inn =child.getInputStream(); 
while((c=inn.read())!=-1){ 
msg[i]=c-48; 
i++; 
} 
inn.close(); 
try{child.waitFor();}catch(InterruptedException e){ 
e.printStackTrace(); 
} 
}catch(IOException e){ 
System.err.println(e); 
} 
for(j=0;j<=i;j++){ 
msgnum=msgnum+msg[j]; 
} 
System.out.println(msgnum); 
int k=0; 
try{ 
for(j=1;j<=msgnum;j++){ 
RandomAccessFile file=new RandomAccessFile("/webmail/userinfo/"+uname+ 

"/"+Integer.toString(j),"r"); 
msgsize[k]=file.length(); 
totalsize=msgsize[k]+totalsize; 
System.out.println(msgsize[k]); 
k++; 
} 
}catch(Exception e){ 
System.out.println(e); 
} 
System.out.println(totalsize); 
return msgnum; 
} 

}  


本栏文章均来自于互联网,版权归原作者和各发布网站所有,本站收集这些文章仅供学习参考之用。任何人都不能将这些文章用于商业或者其他目的。( ProgramFan.Com )
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -