下面是我参考一些资料书编写的代理服务器:
目的是使我们可以共享上网
import java.net.*;
import java.io.*;
public class  HttpProxy extends Thread
{
protected Socket sock;

static public OutputStream log=null; static public int TIMEOUT=900000;
static public int CONNET_RETRIES=5;
static public int CONNET_PAUSE=5;
static public int BUFSIZE=1024; //String host=null;

public HttpProxy(Socket s){
sock=s;
}
public static void main(String[] args) 
{
System.out.println("\r\n"+"启动代理服务器!");
int port=800; ServerSocket ssock;
Socket sock;
try{
ssock=new ServerSocket(port);
while(true){
sock=ssock.accept();//
(new HttpProxy(sock)).start();
}
}catch(Exception e){
System.out.println("\r\n"+port+"端口可能被其他程序占用!!");
e.printStackTrace();
}

}
public void run(){

System.out.println("\r\n"+"线程启动!");
 
int port=80;

try{
sock.setSoTimeout(TIMEOUT);//设置超时时间
//
InputStream is=sock.getInputStream();
String url=getURL(is);             OutputStream os=sock.getOutputStream();
Browser browser = new Browser();
browser.readHtml(url,os);

}catch(Exception e){
System.out.println("\r\n"+"异常1");
e.printStackTrace();
}
finally{
try{
sock.close();
}catch(Exception e){
System.out.println("\r\n"+"异常2");
e.printStackTrace();
}

}
} //得到主机名
public String getURL(InputStream is) throws IOException{ BufferedReader in=new BufferedReader(new InputStreamReader(is));// 
String host=in.readLine(); int n=host.indexOf("GET");
if(n!=-1) host=host.substring(n+4); n=host.indexOf("HTTP");
if(n!=-1) host=host.substring(0,n-1); System.out.println("\r\n"+"获得的url地址为:"+host);
return host;
}
//得到完整的Http请求
public void getHttpRequest(InputStream is) throws IOException{ BufferedReader in=new BufferedReader(new InputStreamReader(is));//???
String temp=null;
do{
temp=in.readLine();
if(temp.length()>0){
System.out.println(temp);
}
else {
System.out.println("\r\n"+"Http请求完毕!");
break;
}
}while(true);
}
}
/////////////////////////////import java.io.*;
import java.net.*;public class Browser {
    public Browser() {
    }    public static void main(String[] args) {
         Browser browser = new Browser();
         browser.readHtml();
    }    /**
     * readHtml
     */
    public void readHtml(String url,OutputStream os) {
        try{
System.out.println("\r\n"+"readHtml函数开始工作!!!!!");
System.out.println("\r\n"+"你所访问的url地址为:"+url);
            //与指定的URL建立连接,并返回InputStream对象in以从这一连接中读入数据            String temp=null;
PrintWriter out=new PrintWriter(os);
BufferedReader in=new BufferedReader(new InputStreamReader((new URL(url)).openStream()) );
            while((temp=in.readLine())!=null){
System.out.println(temp);
out.println(temp);
}
out.flush(); System.out.println("\r\n"+"访问"+url+"结束!");
        }catch(Exception e){
            System.out.println("\r\n"+"Can't open the URL");
//e.printStackTrace();
}    }
    public void readHtml() {
    try{
String url="http://localhost/";
System.out.println("\r\n"+"readHtml函数开始工作!!!!!");
System.out.println("\r\n"+"你所访问的url地址为:"+url);
            //与指定的URL建立连接,并返回InputStream对象in以从这一连接中读入数据
            //InputStream in = (new URL(url)).openStream();
String temp=null;
BufferedReader in=new BufferedReader(new InputStreamReader((new URL(url)).openStream()) );
            while((temp=in.readLine())!=null){
System.out.println(temp);
}
System.out.println("\r\n"+"访问"+url+"结束!");
        }catch(Exception e){
            System.out.println("\r\n"+"Can't open the URL");
//e.printStackTrace();
}    }
}
但当我使用 中国网通的宽带校园上网卡登陆时,就会出现如下异常:启动代理服务器!线程启动!异常1
java.net.SocketException: Unrecognized Windows Sockets error: 10107: recv failed        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(Unknown Source)
        at sun.nio.cs.StreamDecoder$CharsetSD.readBytes(Unknown Source)
        at sun.nio.cs.StreamDecoder$CharsetSD.implRead(Unknown Source)
        at sun.nio.cs.StreamDecoder.read(Unknown Source)
        at java.io.InputStreamReader.read(Unknown Source)
        at java.io.BufferedReader.fill(Unknown Source)
        at java.io.BufferedReader.readLine(Unknown Source)
        at java.io.BufferedReader.readLine(Unknown Source)
        at HttpProxy.getURL(HttpProxy.java:77)
        at HttpProxy.run(HttpProxy.java:50)
请问是怎么回事啊?