2015-03-02 137 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)