如何在eclipse中的端口为args [0]时运行配置服务器
这是我的简单服务器程序,使用java的ServerSocket
类。如何在eclipse中的端口为args [0]时运行配置服务器
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.ServerSocket;
import java.net.Socket;
public class SimpleServerSocketTest {
public static void main(String[] args) {
while (true)
{
try {
if (args.length != 1) {
System.err.println("Usage: java StartServer <port>");
System.exit(1);
}
int port = Integer.parseInt(args[0]);
ServerSocket server = new ServerSocket(port);
System.out.println("Waiting for client...on " + port);
Socket client = server.accept();
System.out.println("Client from /" + client.getInetAddress() + " connected.");
BufferedReader rdr = new BufferedReader(new InputStreamReader(client.getInputStream(), "UTF-8"));
Writer out = new OutputStreamWriter(client.getOutputStream());
String nameClient = rdr.readLine();
System.out.println("Client " + nameClient + " wants to start a game.");
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
}
我试图运行配置服务器 但它口口声声说此“用法:JAVA startserver的”。
我想知道如何配置端口,当端口是args[0]
。顺便说一句,这是在Eclipse中。
如果口口声声说 “用法:JAVA的startserver” 因此它意味着这个代码
System.err.println("Usage: java StartServer <port>");
是始终执行,这意味着病情
args.length != 1
始终是真实的。这可能意味着args.length = 0或args.length> 1
您是否在运行应用程序时让eclipse传递端口号?那是你配置了要使用的命令行参数吗?我不是一个用户的日食,所以我不能帮你在这里。查看本教程是否有帮助http://www.concretepage.com/ide/eclipse/how-to-pass-command-line-arguments-to-java-program-in-eclipse或者您可以尝试找到其他教程。
还要确保你没有传递太多的参数,因为这也会使条件返回true。只要传递尽可能多的参数就可以使条件args.length!= 1失败,它有1个参数。
你也可以在eclipse中配置命令行参数来帮助你看到这个问题。
这是我的做法。
复制并完成您的代码。
选择菜单点击鼠标,运行>运行配置的右键
- 选择参数选项卡,然后键入任何你想要的端口号你的服务器等待客户端连接,然后运行它。
- 与你的客户套接字程序测试它。
这是我使用客户端套接字编程的做法。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class SimpleClientSocketTest {
public static void main(String[] args) {
BufferedReader rdr = null;
Socket sock = null;
PrintWriter out = null;
try{
sock = new Socket("localhost", 9999);
rdr = new BufferedReader(new InputStreamReader(sock.getInputStream(), "UTF-8"));
out = new PrintWriter(sock.getOutputStream(), true);
String toServer = "hello...";
out.println(toServer + "i wants to start a game.");
String fromServer = rdr.readLine();
System.out.println("server: " + fromServer);
if(fromServer == null) System.exit(0);
} catch (IOException e) {
e.printStackTrace();
}
finally
{
try {
rdr.close();
out.flush();
out.close();
sock.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
将消息发送给服务器首先,
通过out.println(toServer +“我要开始游戏。“);
然后,接收从服务器
字符串fromServer = rdr.readLine(); 的System.out.println(” 服务器:“+ fromServer);
有一两件事要告诉你关于你的服务器程序。 这是你的一个定制版本。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class SimpleServerSocketTest {
public static void main(String[] args) {
if (args.length != 1) {
System.err.println("Usage: java StartServer <port>");
System.exit(1);
}
int port = Integer.parseInt(args[0]);
ServerSocket server = null;
try {
server = new ServerSocket(port);
} catch (IOException e2) {
e2.printStackTrace();
}
while (true) {
BufferedReader rdr = null;
PrintWriter out = null;
int clientConnectionCnt = 0;
try {
System.out.println("1Waiting for client...on " + port);
Socket client = server.accept();
if(client.isConnected())
{
System.out.println("Client from /" + client.getInetAddress() + " connected.");
String nameClient = null;
try {
rdr = new BufferedReader(new InputStreamReader(client.getInputStream(), "UTF-8"));
out = new PrintWriter(client.getOutputStream(), true);
System.out.println("clientConnectionCnt....." + clientConnectionCnt++);
nameClient = rdr.readLine();
out.println("Yes, You can");
if(nameClient == null) break;
System.out.println("Client: " + nameClient);
} catch (IOException e) {
e.printStackTrace();
break;
} finally {
out.flush();
rdr.close();
out.close();
try {
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
} catch (IOException e) {
e.printStackTrace();
break;
}
}
try {
server.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
首先,你应该在while语句之外创建一个服务器套接字。
try {
server = new ServerSocket(port);
} catch (IOException e2) {
e2.printStackTrace();
}
只是在while语句的util客户端套接字等待接受。
while (true) {
.... skip ...
System.out.println("1Waiting for client...on " + port);
Socket client = server.accept();
然后,创建客户端套接字的输入/输出流。
rdr = new BufferedReader(new InputStreamReader(client.getInputStream(), "UTF-8"));
out = new PrintWriter(client.getOutputStream(), true);
最后,用套接字流读写消息。
nameClient = rdr.readLine();
out.println("Yes, You can");
问候,拉赫。