2015-03-02 202 views
2

我在java中創建了一個簡單的服務器和客戶端,用於發送和接收來自彼此的消息。目前,我已將端口號硬編碼到代碼中,但我想將其更改爲來自命令行的用戶輸入。在下面的代碼中,我使用args [0]作爲端口號,但是當我編譯失敗時,任何人都可以幫忙嗎? ,我是新來的Java和插座很抱歉,如果這是一個很小的問題Java Socket命令行參數

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

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

     //declaring string variables 
     String fromclient; 
     String toclient; 

     //new socket object, listening on port 3000 
     ServerSocket Server = new ServerSocket (args[0]); 

     //prints when started and no client connected 
     System.out.println ("TCPServer Waiting for client on port 3000"); 

     //infinate loop 
     while(true) 
     { 

      //listens for connection 
      Socket connected = Server.accept(); 

      //prints clients adddress and port 
      System.out.println(" THE CLIENT"+" "+ connected.getInetAddress() +":"+connected.getPort()+" IS CONNECTED "); 

      //reads in message form user 
      BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));  

      //reads in message from clinet 
      BufferedReader inFromClient = new BufferedReader(new InputStreamReader (connected.getInputStream())); 

      //prints message to client 
      PrintWriter outToClient = new PrintWriter(connected.getOutputStream(),true); 


      //infinate loop 
      while (true) 
      { 

       //printing instructions for killing connection 
       System.out.println("SEND(Type Q or q to Quit):"); 

       //reading in user input 
       toclient = inFromUser.readLine(); 

       //if user enters q or Q kill connection 
       if (toclient.equals ("q") || toclient.equals("Q")) 
       { 
        outToClient.println(toclient); 
        connected.close(); 
        break; 
       } 
       else 
       { 
        outToClient.println(toclient); 
       } 

       //reading from client 
       fromclient = inFromClient.readLine(); 

       //if user enter q or Q kill connection 
       if (fromclient.equals("q") || fromclient.equals("Q")) 
       { 
        connected.close(); 
        break; 
       } 

      //printing out the message from client 
       else 
       { 
        System.out.println("RECIEVED:" + fromclient); 
       } 

       } 

     } 
    } 
    } 

這是即將到來

SimpleServer.java:14: error: no suitable constructor found for ServerSocket(String) 
    ServerSocket Server = new ServerSocket (args[0]); 
+0

嘗試用它來取代代碼'ServerSocket Server = new ServerSocket(Integer.parseInt(args [0]));'ServerSocket沒有將字符串作爲參數的構造函數。 – Eugene 2015-03-02 13:26:09

回答

2

ServerSocket Server = new ServerSocket (Integer.parseInt(args[0]));

args[0]string,需要int

1

構造函數參數是int類型的錯誤,而參數給出主要是String類型。 解決方法就是使用Integer.valueOf(args [0])將參數解析爲一個整數。 你可能想要添加更多的健壯性檢查等 - 但爲了快速解決這個問題應該可以工作。

2

要分析你必須轉換​​一起詮釋:Integer.parseInt(arg[0]) ServerSocket沒有構造函數ServerSocket(String)