这是我使用java ServerSocket
类的简单服务器程序。
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中。
答案 0 :(得分:1)
如果它一直说“Usage:java StartServer”,则表示此代码
System.err.println("Usage: java StartServer <port>");
始终执行,这意味着条件
args.length != 1
总是如此。这可能意味着args.length = 0或args.length&gt; 1
在运行应用程序时,您是否让eclipse传递了端口号?那你是否配置了要使用的命令行参数?我不是用户日食,所以我在这里无法帮助你。看看本教程是否有用http://www.concretepage.com/ide/eclipse/how-to-pass-command-line-arguments-to-java-program-in-eclipse,或者您可以尝试查找其他教程。
还要确保没有传递过多的参数,因为这也会使条件返回true。只需传递尽可能多的参数来使条件args.length!= 1失败,这就是有一个参数。
您还可以通过在eclipse中配置命令行参数来查看此问题。
答案 1 :(得分:0)
这是我的练习。
复制并完成您的代码。
选择鼠标右键单击菜单,运行&gt;运行配置
这是我使用客户端套接字编程的做法。
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 +&#34;我想开始游戏。&#34;);
然后,从服务器接收。
String fromServer = rdr.readLine(); System.out.println(&#34;服务器:&#34; + 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");
问候,拉赫。