2015-11-07 159 views
0

我正在创建一个TCP客户端 - 服务器连接,其中客户端向服务器发送两个数字,并且服务器返回它们的总和。我的TCPServer.java类似乎有问题。它保持返回“套接字关闭”而不返回任何总和。经过多次测试后,程序停止在我分割字符串的部分(要添加的两个数字用逗号分隔)。我的TCP客户端 - 服务器连接有什么问题?

这是怎么回事?并且它与我关闭缓冲区的位置有什么关系?

public class TCP_ServerThread extends Thread{ 

    Socket connectionSocket2; 
public TCP_ServerThread(Socket connectionSocket) 
{ 
this.connectionSocket2=connectionSocket; 

} 
    public void run(){ 

    try{ 


    Socket connectionSocket=this. connectionSocket2; 

    BufferedReader inFromClient =new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); 
    DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); 


    String clientsentence = inFromClient.readLine(); 
    String[]arr=clientsentence.split(","); 
    System.out.println(arr[0]); 
    System.out.println(arr[1]); 
    int sum=Integer.parseInt(arr[0])+Integer.parseInt(arr[1]); 
    outToClient.writeBytes(Integer.toString(sum)); 
    outToClient.close(); 
      } 
    catch(Exception n) 
    { 
    System.out.println("cannot connect"); 
    } 


} 

这里是TCPClient.java类

public class TCP_ClientThread extends Thread { 
public static int summ=0,portNum; 
public static String ip; 
public TCP_ClientThread(String ip,int port) 
{ 
this.ip=ip; 
this.portNum=port; 

} 

@Override 
public void run() { 
try{ 
    TCPClient.gate.await(); 
    int clientNum=summ++; 
    int firstNumber,secondNumber; 



     try{ 
     // 

     Random num=new Random(); 

    firstNumber=num.nextInt(); 
    System.err.println("first no of client "+clientNum+"is"+firstNumber); 

    secondNumber=num.nextInt(); 
     System.err.println("second no of client "+clientNum+"is"+secondNumber); 
//---------------*open socket----------------------------------- 
    String ipp=this.ip; 
    int portt=this.portNum; 
Socket ClientSocket = new Socket (ipp,portt); 


//------------* input and output buffer--------------------------------------- 

    DataOutputStream OutToServer = new DataOutputStream (ClientSocket.getOutputStream()); 
    BufferedReader inFromServer = new BufferedReader (new InputStreamReader(ClientSocket.getInputStream())); 

    System.out.println("connected"); 

//------------------* data inside buffer----------------------------------- 

    String data1=Integer.toString(firstNumber); 
    String data2=Integer.toString(secondNumber); 
    String data=(data1.concat(",")).concat(data2); 

    //-----------------------*Send to server------------------------------- 

    OutToServer.writeBytes(data); 
    OutToServer.close(); 
    System.err.println("send packet of "+clientNum); 

    //--------------------------------------------------------------------------------- 

    //-----------------------**Receive-------------------------------------- 


    String sum = inFromServer.readLine(); 
    // inFromServer.close(); 
    System.out.println("sum of "+clientNum+"= "+sum); 


    ClientSocket.close();  

    } 
    catch(Exception e) 
    { 

     System.out.println(e.getMessage()); 


    } 


} 
catch(Exception b) 
{ 
System.out.println("gate"); 
} 

回答

0

“插座关闭”意味着关闭套接字,然后继续使用它。

关闭套接字的输入或输出流也会关闭套接字。