java中的套接字客户机/服务器停止方法
这是我的教员项目的简单客户端/服务器套接字应用程序。首先,应该运行服务器类,然后如果客户机类运行,它将打印出本地计算机的IP地址和所使用的端口 我想不出一件事: 如何以及在何处在类中创建关闭(停止)服务器的方法?及 如何使它像一个事件或某事,例如,如果客户端 发送“停止”,它应该以某种方式停止服务器 SERVER.JAVAjava中的套接字客户机/服务器停止方法,java,sockets,Java,Sockets,这是我的教员项目的简单客户端/服务器套接字应用程序。首先,应该运行服务器类,然后如果客户机类运行,它将打印出本地计算机的IP地址和所使用的端口 我想不出一件事: 如何以及在何处在类中创建关闭(停止)服务器的方法?及 如何使它像一个事件或某事,例如,如果客户端 发送“停止”,它应该以某种方式停止服务器 SERVER.JAVA import java.io.*; import java.net.*; public class Server { public static void main
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) {
System.out.println("The server has been summoned.\n");
System.out.println("The server is waiting for client to come...");
try {
ServerSocket servertest = new ServerSocket(2014);
while (true) {
try {
Socket ser = servertest.accept();
new ThreadSer(ser).start();
} catch (IOException e) {}
}
} catch (IOException e) {System.err.println(e);}
}
public static class ThreadSer extends Thread {
private Socket s;
public ThreadSer(Socket s) {
this.s = s;
}
@Override
public void run() {
try {
String response = "This is the IP: " + s.getLocalAddress() + " that has come via port: "
+ s.getLocalPort() + "\r\n";
OutputStream out = s.getOutputStream();
out.write(response.getBytes());
} catch (IOException e) { System.err.println(e); }
}}}
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
Socket socket = new Socket("localhost", 2014);
new OutputThread(socket.getInputStream()).start();
}
public static class OutputThread extends Thread {
private InputStream inputstream;
public OutputThread(InputStream inputstream) {
this.inputstream = inputstream;
}
@Override
public void run() {
BufferedReader input = new BufferedReader(new InputStreamReader(inputstream));
while (true) {
try {
String line = input.readLine();
System.out.println(line);
} catch (IOException exception) {
exception.printStackTrace();
break;
}
}
}}}
CLIENT.JAVA
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) {
System.out.println("The server has been summoned.\n");
System.out.println("The server is waiting for client to come...");
try {
ServerSocket servertest = new ServerSocket(2014);
while (true) {
try {
Socket ser = servertest.accept();
new ThreadSer(ser).start();
} catch (IOException e) {}
}
} catch (IOException e) {System.err.println(e);}
}
public static class ThreadSer extends Thread {
private Socket s;
public ThreadSer(Socket s) {
this.s = s;
}
@Override
public void run() {
try {
String response = "This is the IP: " + s.getLocalAddress() + " that has come via port: "
+ s.getLocalPort() + "\r\n";
OutputStream out = s.getOutputStream();
out.write(response.getBytes());
} catch (IOException e) { System.err.println(e); }
}}}
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
Socket socket = new Socket("localhost", 2014);
new OutputThread(socket.getInputStream()).start();
}
public static class OutputThread extends Thread {
private InputStream inputstream;
public OutputThread(InputStream inputstream) {
this.inputstream = inputstream;
}
@Override
public void run() {
BufferedReader input = new BufferedReader(new InputStreamReader(inputstream));
while (true) {
try {
String line = input.readLine();
System.out.println(line);
} catch (IOException exception) {
exception.printStackTrace();
break;
}
}
}}}
您应该不断请求客户端的输入流。。将其放入始终接受客户端输入的循环中 例如:
public static class ThreadSer extends Thread {
private Socket s;
public ThreadSer(Socket s) {
this.s = s;
}
@Override
public void run() {
try {
String response = "This is the IP: " + s.getLocalAddress() + " that has come via port: "
+ s.getLocalPort() + "\r\n";
ObjectInputStream input = new ObjectInputStream(s.getInputStream());
while(true)
{
Object object = input.readObject();
if(object instanceof String)
{
String command = ((String) object).trim();
if(command.equals("stop"))
break;
}
}
s.close();
} catch (IOException e) { System.err.println(e); }
}}}您可以尝试将它们制作成线程,然后再制作thread.end();或者是因为我的网速太差,所以我没有及时看到他的答案什么是传入的,在哪里定义的?@mpavlovic89传入的是socketOh,谢谢你的编辑棒。那个么命令呢,当它做出反应并停止服务器时。如果服务器处于打开状态,当客户端在控制台中键入“停止”时,它仍然处于打开状态。显然缺少触发器?@mpavlovic89 yea您只需要为ThreadSer类添加另一个参数,即socketserver,当命令为stop时,通过socketServerObject.close()停止socketserver