Java Socket命令行参数
问题描述:
我在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]);
答
ServerSocket Server = new ServerSocket (Integer.parseInt(args[0]));
args[0]
是string
,需要int
答
构造函数参数是int类型的错误,而参数给出主要是String类型。 解决方法就是使用Integer.valueOf(args [0])将参数解析为一个整数。 你可能想要添加更多的健壮性检查等 - 但为了快速解决这个问题应该可以工作。
尝试用它来取代代码'ServerSocket Server = new ServerSocket(Integer.parseInt(args [0]));'ServerSocket没有将字符串作为参数的构造函数。 – Eugene 2015-03-02 13:26:09