现在的问题是,每次启动客户端,只能收发一次数据,第二次客户端就连接不上服务端了。我的主要的代码如下:
//Server.java
import java.io.*;
import java.net.*;
public class Server
{
    public static void main(String[] args) throws IOException 
    {
ServerSocket serverSocket = null;
        try 
        {
            serverSocket = new ServerSocket(9624);    
        } 
        catch (IOException e) 
        {
            System.err.println("打开端口发生错误.");
            System.exit(1);
        } 
    
        while(true)
        {
      new MultiServerThread(serverSocket.accept()).start();
        }
        serverSocket.close();
     }
}
//MultiServerThread.java
import java.lang.*;
import java.net.*;
import java.io.*;
public class MultiServerThread extends Thread 
{
    private Socket socket = null;
    public MultiServerThread(Socket socket) 
    {
  super("MultiServerThread");
      this.socket = socket;
    }
    public void run() 
    {
try 
{
    PrintWriter out = null;
    BufferedInputStream in = null;
        out = new PrintWriter(socket.getOutputStream(), true);
        in = new BufferedInputStream(socket.getInputStream());
        byte[] buf = new byte[255];        
        int bytes_read = 0;         
        bytes_read = in.read(buf);          
        DataProcess dataProcess = new DataProcess(buf,bytes_read);           
        out.print("FLZSCS");
        out.flush();
        
    out.close();
in.close();
socket.close(); 

catch (IOException e) {}
    }
}

解决方案 »

  1.   

    大概客户端程序没有退出吧。程序写法上很多问题,不严谨。
    1. 用try{}catch(){}finally{},确保释放
    2. while(true){...},应注意Sleep
    3. run() 出现异常给隐藏起来了,应该有提示
    4. 读取数据应使用 while(){...},否则可能出现截断读取错误
      

  2.   

    帮你弄了个测试文件,你再检查一下你的客户端代码:
    //Server.java
    import java.io.*;
    import java.net.*;
    public class Server
    {
        public static void main(String[] args) throws IOException 
        {
    ServerSocket serverSocket = null;
            try 
            {
                serverSocket = new ServerSocket(9624);    
            } 
            catch (IOException e) 
            {
                System.err.println("打开端口发生错误.");
                System.exit(1);
            } 
        
            while(true)
            {
         new MultiServerThread(serverSocket.accept()).start();
            }
            //serverSocket.close();
         }
    }//MultiServerThread.java
    import java.lang.*;
    import java.net.*;
    import java.io.*;
    public class MultiServerThread extends Thread 
    {
        private Socket socket = null;
        public MultiServerThread(Socket socket) 
        {
      super("MultiServerThread");
          this.socket = socket;
        }
        public void run() 
        {
    try 
    {
        PrintWriter out = null;
        BufferedInputStream in = null;
            out = new PrintWriter(socket.getOutputStream(), true);
            in = new BufferedInputStream(socket.getInputStream());
            byte[] buf = new byte[255];        
            int bytes_read = 0;         
            bytes_read = in.read(buf);  
            
            // 添加
            System.out.println(new String(buf)); 
            
            //DataProcess dataProcess = new DataProcess(buf,bytes_read);           
            out.print("FLZSCS");
            out.flush();
            
        out.close();
    in.close();
    socket.close(); 

    catch (IOException e) {}
        }
    }// Client.java
    import java.io.*;
    import java.net.*;
    public class Client
    {
        public static void main(String[] args) throws IOException 
        {
    Socket clientSocket = null;
    int nCount = 0;
            try 
            {
              while(true)
              {
                
                clientSocket = new Socket(InetAddress.getLocalHost(),9624);   
                BufferedReader   br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                PrintWriter pw = new PrintWriter(clientSocket.getOutputStream(), true);
                pw.println("Hello nCount=" + nCount);
                String strLine = br.readLine();
                System.out.println(strLine);       
                clientSocket.close(); 
                if ((++nCount) % 5 == 0) break;
              }
            } 
            catch (IOException e) 
            {
                System.err.println("打开端口发生错误.");
                System.exit(1);
            } 
    }
    }运行:
    F:\>java Server
    Hello nCount=0
    Hello nCount=1
    Hello nCount=2
    Hello nCount=3
    Hello nCount=4
    F:\>startF:\>java Client
    FLZSCS
    FLZSCS
    FLZSCS
    FLZSCS
    FLZSCS
      

  3.   

    to:TinyJimmy(Jimmy)
    小弟刚学,让老大见笑了 to:yuzl32(Hello!有酒醉) 
    我测试了下,用你写的client.java测试没有问题,我自己写的测试程序测试,服务端也没问题。可是用GPRS客户端连接还是一样,只能连接一次,在GPRS端显示的是无法连接,客户端是用c写的,应该没有问题,因为我用厂家提供的一个测试程序,测试很正常。问题应该出现在服务端的代码上,谢谢两位。
      

  4.   

    to yuzl32(Hello!有酒醉)客户端的代码我也没有
      

  5.   

    我用一个VC写的程序作为服务端,发现客户端可以正常连接,数据发送后就自动断开了,第2次发送也正常,
    TinyJimmy(Jimmy) 大哥,你说的这些问题,2和4我都做了,好象没效果,1我不是很懂能更具体点吗?
    1. 用try{}catch(){}finally{},确保释放
    2. while(true){...},应注意Sleep
    3. run() 出现异常给隐藏起来了,应该有提示
    4. 读取数据应使用 while(){...},否则可能出现截断读取错误