本来作为server的机器只是利用socket来提供一个监听的端口来实现与client之间的
通信呀!要想实现多client的处理,那么 就该在sevver端实现多线程的方法,一旦
某个client连接到了server那么就启动一个对他处理的线程,而server继续监听其他的
client访问!
ServerSocket s=new ServerSocket(PORT);线程中的
public viod run()
{ .....
  Socket client = s.accept();
  client.setKeepAlive(true);
  Thread servant = new Thread(); //处理client的线程
  servant.start()
 ............}

解决方案 »

  1.   

    一、对于文件的操作如File,FileInputStream,FileOutputStream等类,用于读、写、创建、删除文件。
    二、对于网络数据传输,如ServerSocket/Socket,DatagramSocket等类。
    三、自己制定协议、数据格式等给你例子//发送方
    //用法: $java SenderSide desthost destport  filename
    public class SenderSide
    {
      public static void main(String args[]) throws Exception
      {
        new SenderSide(args[0],Integer.parseInt(args[1]),args[2]); //从参数解析出接收方主机地址、端口、要发送的文件名
      }
      public SenderSide(String dest_host,int dest_port,String fileName) throws Exception
      {
         java.net.Socket sock = new java.net.Socket(dest_host,dest_port);  //
         java.io.OutputStream sock_os = sock.getOutputStream();
       
         java.io.FileInputStream fis = new java.io.FileInputStream(fileName); 
         int b;
         //发送文件内容到接收方
         while((b=fis.read()) != -1){
           sock_os.write(b); 
         }
         fis.close();
         sock_os.close();
         sock.close();           
      }
    }//接收方
    //用法:$java ReceiverSide fileNameToSave
    public class ReceiverSide
    {
      public static void main(String args[]) throws Exception
      {
        java.net.ServerSocket server = new java.net.ServerSocket();
        System.out.println("address:"+server.getInetAddress()+" port:"+server.getPort()); //将这里显示的地址在发送端作为参数
        java.net.Socket sock = server.accept();     
        java.io.InputStream sock_is = socket.getInputStream();
        
        java.io.FileOutputStream fos = new java.io.FileOutputStream(args[0]);
        int b;
        while((b=sock_is.read()) != -1){
          fos.write(b);
        }
        fos.close();
        sock_is.close(); 
        sock.close();
        server.close();
      }
    }先运行接收方,以待存储的文件名为参数,运行后会显示接收方主机的地址和端口号
    再运行发送方,以主机地址、端口号和要发送文件的文件名作执行参数
    这只是一个非常简单的协议(简直就不能称为协议),没有考虑到各种情况,也没有错误处理等,仅仅能作为一个参考
      

  2.   

    “在服务器上开两个端口,一个控制端口,一个数据端口,每一个客户端连接到服务器的控制端口时,服务器就为这个客户端打开一个控制连接线程,然后当客户端在控制线程向服务器发送数据传输请求时,就给这个客户端在数据端口建立一个数据连接线程,这样就可以避免控制传输与数据传输出现争执而引起阻塞。但是必须注意多线程之间的同步!!”    用ServerScoket只能监听一个端口呀,那两个端口该怎样做呢?能具体的说一下吗?
      

  3.   

    to:zgqallan()
    一位一位发,效率会不会低啊? 
      

  4.   

    ServerScoket是只能监听一个端口啊,但是通过和client的通信可以告诉client另外打开的数据端口是什么!这不就行了吗?
      

  5.   

    to zgqallan() :最好使用缓存技术,这样能大大提高传输率