2017-03-05 15 views
1

ソケットプログラミングに慣れようとしており、クライアントがWebサイト/ポートに入り、その情報をサーバーに渡すことができるプログラムを書こうとしたサーバーにすべてのページテキストのHTTP Getを実行させ、それを印刷し(サーバー側)、そのテキストを印刷のためにクライアントに戻します(クライアント側)。Java TCPソケットプログラミング - クライアント上で印刷するためにサーバー上に大きな文字列を作成する

これまでは、指定されたWebページサーバー側を読み取り、そのページをStringに入力しようとしていましたが、なんらかの理由で、その文字列のFIRST行がクライアントに返されて何も返されませんelse。私は私が間違って何が起こっているかを100%確実ではないと私は物事のさまざまなトラブルシューティングをしようとしてい

Exception in thread "main" java.net.SocketException: Software caused connection abort: socket write error 
at java.net.SocketOutputStream.socketWrite0(Native Method) 
at java.net.SocketOutputStream.socketWrite(Unknown Source) 
at java.net.SocketOutputStream.write(Unknown Source) 
at java.io.DataOutputStream.writeBytes(Unknown Source) 
at assign1.TCPServer15.main(TCPServer15.java:48) 

、これはので、このような何かをしようとしている私の最初の時間です:私はまた、このエラーサーバー側を取得します愛のヒント!ここで

クライアント

import java.io.*; 
import java.net.*; 

class TCPWebClient 
{ 
    public static void main(String argv[]) throws Exception 
    { 
     String sentence; 
     String webText; 

     BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); 
     Socket clientSocket = new Socket("localhost", 6789); 
     DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); 
     BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
     System.out.print("Enter a single string in the form: server/port. \nExample: (www.google.com/80)\n"); 
     sentence = inFromUser.readLine(); 
     outToServer.writeBytes(sentence + '\n'); 

     webText = inFromServer.readLine();  
     System.out.println("FROM SERVER:\n" + webText); 
     clientSocket.close(); 
    } 
} 

とサーバのための私のコードのためのコードです:私は同じ問題に直面していた

import java.io.*; 
import java.net.*; 

class TCPServer15 
{ 
    public static void main(String argv[]) throws Exception 
     { 
     String clientSentence; 

     ServerSocket welcomeSocket = new ServerSocket(6789); 

     while(true) 
     { 
      Socket connectionSocket = welcomeSocket.accept(); 
      BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); 
      DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); 
      clientSentence = inFromClient.readLine(); 
      System.out.println("Received: " + clientSentence); 

      String [] connectionInfo = clientSentence.split("/"); 
      Socket webSocket = new Socket(connectionInfo[0], Integer.parseInt(connectionInfo[1])); 

      PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(webSocket.getOutputStream()))); 
      out.println("GET /index.html HTTP/1.0"); 
      out.println(); 
      out.flush(); 

      BufferedReader inFromWeb = new BufferedReader(new InputStreamReader(webSocket.getInputStream())); 

      String inputLine; 
      StringBuilder stringBuilder = new StringBuilder(); 

      while ((inputLine = inFromWeb.readLine()) != null) 
      { 
      System.out.println(inputLine); 
      stringBuilder.append(inputLine); 
      stringBuilder.append("\n"); 
      } 

      String finalString = stringBuilder.toString(); 
      inFromWeb.close(); 

      outToClient.writeBytes(finalString); 
     } 
     } 
} 

答えて

0

。 一般的に、この種のエラーは、クライアントが接続を閉じ、サーバーがそのクライアントに書き込みを試みているために発生します。 出力ストリームでサーバが終了するまで、クライアントの接続が開いていることを確認してください。 さらにもう一つ、入力と出力のストリームを閉じるのを忘れてはいけません。

1

お客様のクライアントでは1行しか読んでいません。これは、whileループにする必要があります(クライアントが同じように振る舞うべきそれがGoogleに話しながら、あなたのサーバーのコード化されているか確認してください

私はあなたのクライアントとサーバーを変更した - 。。スニペット

サーバー

 outToClient.writeBytes(finalString); 
     outToClient.flush(); 
     outToClient.close(); 
     inFromWeb.close(); 

クライアント

StringBuilder output = new StringBuilder(); 
    while ((webText = inFromServer.readLine()) != null) { 

     output.append(webText); 
     output.append("\n"); 
    } 

    System.out.println("FROM SERVER:\n" + output.toString()); 

    clientSocket.close(); 
関連する問題