2016-02-26 22 views
0

我对这个套接字编程很无知。我正在尝试打印服务器控制台目录中的文件内容,但服务器无法找到该文件。在套接字编程中不打印文件内容

这里是我的代码:

myClient.java 


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

public class myClient { 
    public static void main(String args[]){ 
     Socket socket = null; 
     String hostName,command,fileName; 
     int port; 

     if(args.length == 0){ 
      System.out.println("Error: command line arguments (hostname,port,command," 
        + "filename) not found.\nTry again...!!!"); 
      System.exit(1); 
     } 
     hostName = args[0]; 
     port = Integer.parseInt(args[1]); 
     command = args[2]; 
     fileName = args[3]; 

     try{ 
      socket = new Socket(hostName,port); 
      System.out.println("Client Socket Created..!!"); 

      // creating input and output streams to read from and write to the server 
      OutputStream os = socket.getOutputStream(); 
      OutputStreamWriter osw = new OutputStreamWriter(os); 
      BufferedWriter bw = new BufferedWriter(osw); 

      InputStream is = socket.getInputStream(); 
      InputStreamReader isr = new InputStreamReader(is); 
      BufferedReader br = new BufferedReader(isr); 

      if(command.equals("GET")){ 

       System.out.println("Client: GET "+fileName+" HTTP/1.1\n"); 
       bw.write(fileName); 

       String line = br.readLine(); 
       while(line != null){ 
        System.out.println("Server: "+line); 
        line = br.readLine(); 
       } 
      } 
      if(command.equals("PUT")){ 
       System.out.println("Client: "+fileName+" sent to server"); 
       bw.write(fileName); 
       // pass the file contents 
       bw.flush(); 

       System.out.println("Server: "+br.readLine()); 
      } 
     } 
     catch(UnknownHostException uhe){ 
      System.out.println("Unknown Host...!!!"); 
      System.exit(1); 
     } 
     catch(IOException e){ 
      e.printStackTrace(); 
     } 
     finally 
     { 
      //Closing the socket 
      try{ 
       socket.close(); 
      } 
      catch(Exception e){ 
       e.printStackTrace(); 
      } 
     } 
    } 
} 


myServer.java 


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

public class myServer { 
    static Socket socket; 
    public static void main(String args[]){ 
     try { 
      int port = Integer.parseInt(args[0]); 
      //String fileName = ""; 
      ServerSocket server = new ServerSocket(port); 

      while(true) 
      { 
       System.out.println("Server started and listening on port "+port); 
       socket = server.accept(); 
       System.out.println("received a connection :"+socket); 

       InputStream is = socket.getInputStream(); 
       InputStreamReader isr = new InputStreamReader(is); 
       BufferedReader br = new BufferedReader(isr); 

       OutputStream os = socket.getOutputStream(); 
       OutputStreamWriter osw = new OutputStreamWriter(os); 
       BufferedWriter bw = new BufferedWriter(osw); 

       bw.write("Echo server 1.1\n"); 
       bw.flush(); 

       String line = br.readLine(); 
       while(line != null){ 
        bw.write("Echo: "+line); 
        bw.flush(); 
        line = br.readLine(); 
       } 
      } 
     } catch (IOException e) { 
      System.out.println("No conncetion established"); 
      System.exit(0); 
      //e.printStackTrace(); 
     } 
     finally 
     { 
      //Closing the socket 
      try{ 
       socket.close(); 
      } 
      catch(Exception e){ 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

请帮我找到一个解决这个。我已经尝试了很多浏览不同网站的例子,但没有得到解决方案。

+0

你得到什么错误?请编辑错误消息和堆栈跟踪到问题中。 –

+0

没有得到任何错误或异常。我试图从客户端发送一个文件并打印它的内容,但是我的这个代码并没有这样做。当我完全尝试新的时候,我可能会缺少基本的东西。 – Sid

回答

0
System.out.println("Client: GET "+fileName+" HTTP/1.1\n"); 
bw.write(fileName); 

您没有向服务器写入正确的HTTP命令。您只发送文件名,而不是完整的命令,例如打印到控制台的GET命令。

HTTP中的行结束符指定为\r\n,而不是\n

您也不会尝试正确实现HTTP 1.1的其他方面,例如内容长度。如果你要实现你的HTTP RFC需要2616

良好的知识如果可能的话,你应该抛出这个拿走并使用HttpURLConnection.