2013-09-21 64 views
1

客户端成功收到服务器端的一条消息后收到错误消息。错误信息是:线程“主”java.net.SocketException异常:软件导致连接中止:recv失败第一次试用后TCP套接字通信失败

看起来在客户端类中,line = inFromserver.readLine();不会收到任何来自服务器的消息,从而使其成为“null”。但我不知道为什么。有人可以帮我吗?

服务器类

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.io.OutputStreamWriter; 
import java.io.PrintWriter; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.net.SocketException; 


public class ConcurrentServer { 
    public static void main(String args[]) throws IOException 
    { 
    int portNumber = 20020; 
    ServerSocket serverSocket = new ServerSocket(portNumber); 
    while (true) { 
     new ServerConnection(serverSocket.accept()).start(); 
    } 

} 

} 

class ServerConnection extends Thread 
{ 
    Socket clientSocket; 
    PrintWriter outToClient; 

    ServerConnection (Socket clientSocket) throws SocketException 
    { 
    this.clientSocket = clientSocket; 
    setPriority(NORM_PRIORITY - 1);  
} 


public void run() 
{ 
    BufferedReader inFromClient; 
    try{ 
     inFromClient = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
     OutputStream outToClient = clientSocket.getOutputStream(); 
     PrintWriter printOutPut = new PrintWriter(new OutputStreamWriter(outToClient),true); 
     String request= inFromClient.readLine(); 
     if(request !=null) 
     { 
      if(!request.equalsIgnoreCase("finished")) 
      { 
       printOutPut.write("Receving data"); 
      } 
      else 
      { 
       printOutPut.write("file received"); 
      } 
     } 

     }catch (IOException e) { 
     System.out.println(e.getMessage()); 
     e.printStackTrace(); 
     } 


     try 
     { 
      clientSocket.close(); 
     }catch (IOException e) { 
      System.out.println(e.getMessage()); 
      e.printStackTrace(); 
      } 
    } 
} 

客户端类

import java.io.*; 
import java.net.*; 
import java.util.concurrent.TimeUnit; 

public class client{ 

public static void main(String[] args) throws Exception{ 

    final int PORT=20020; 
    String serverHostname = new String("127.0.0.1"); 

    Socket socket; 
    PrintWriter outToServer; 
    BufferedReader inFromServer; 
    BufferedReader inFromUser; 
    byte[] dataToTransfer; 
    String line; 
    int counter=0; 
    int i=0; 

    socket = new Socket(serverHostname, PORT); 
    outToServer = new PrintWriter(socket.getOutputStream(),true); 
    inFromServer = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
    inFromUser = new BufferedReader(new InputStreamReader(System.in)); 

    System.out.println("Simulation of file transferring"); 
    System.out.println("Enter the file size you want to transfer (Max Size 50MB)"); 

    int userInput = Integer.parseInt(inFromUser.readLine()); 

    System.out.println("Transferring start"); 

    boolean connection = true; 
    while(connection) 
    { 

     //set transfer rate at 1MB/s 
     dataToTransfer = new byte[1000000]; 

     Thread.sleep(1000); 

     if(i<userInput) 
     { 
      outToServer.println(dataToTransfer); 
      counter++; 
      System.out.println(counter + "MB file has been transferred"); 
     } 
     else 
     { 
      outToServer.println("Finished"); 
     } 


     line = inFromServer.readLine(); 
     System.out.println(line); 
     if(!line.equalsIgnoreCase("file received")) 
     { 

     } 
     else 
     { 
      System.out.println("Transfer completed"); 
      break; 
     } 
     i++; 
    } 

    outToServer.close(); 
    inFromServer.close(); 
    inFromUser.close(); 
    socket.close(); 
} 

} 

回答

0

您要发送的字节数组从客户机到服务器和服务器端读取字符串。

插入财产以后在您的字节数组,然后将您的字节数组转换成String

字符串str =新字符串(dataToTransfer,整数偏移,1000000);

然后写:

outToServer.println(str);