服务器代码如下:
import java.io.*;
import java.net.*;
public class ProxyServer extends Thread
{
private ServerSocket    ss;
public ProxyServer() throws IOException
{
ss = new ServerSocket(2008,1);
}
public static void main(String[] args) throws Exception
{
ProxyServer server1=new ProxyServer();
server1.start();
}
public void run()
{
while(true)
{
Socket connectionSocket;
try
{
connectionSocket = ss.accept();
BufferedReader inFromClient=new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
String str=inFromClient.readLine(); System.out.println(str);
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
那么,但我在浏览器中使用代理,IE输入www.sina.com.cn的时候,有反应,在Firefox中输入www.163.com也有反应。这说明多线程起作用了?
当www.sina.com.cn进来的时候,run中执行。。
当www.163.com 进来的时候,run 又开辟了一个新的线程还是什么的处理他???否则怎么理解?

解决方案 »

  1.   

    不对, 现在你的程序还是单线程. 如果要实现你说的方法, 需要增加一个处理线程. 如:while (true) {
      try {
        Socket connectionSocket = socket.accept();
        new HandleSession(socket).start();  //HandleSession是处理线程, 单独处理IO
      } catch (Exception ioe) {
      }
    }
      

  2.   

    while (true) {
      try {
        Socket connectionSocket = socket.accept();
        new HandleSession(connectionSocket).start();  //HandleSession是处理线程, 单独处理IO
      } catch (Exception ioe) {
      }
    }
      

  3.   

    TinyJimmy(Jimmy)  :
    但是,既然现在是单线程的,为什么却能够同时响应 sina 和 163 这两个请求呢?
      

  4.   

    因为你的端口在不行地监听(通过while循环),处理完这个,又处理那个。但线程只有一个。
      

  5.   

    while(true)    // 第二次进入时,connectionSocket 重新被连接
    {
    Socket connectionSocket;
    try
    {
    connectionSocket = ss.accept();
    // 输出此连接的数据