Java 套接字服务器cleint
我有web应用程序JSF作为客户端,另一个java应用程序作为服务器。现在我有了一个startEngine()函数,它可以在服务器上启动应用程序,并且运行良好。我还有另一个叫做addWebSite的功能,它可以将一个网站添加到之前打开的同一个应用程序中。我对服务器的第一次调用有效,但第二次不行,我想在服务器上调用更多的函数 这是我的startEngine函数和addWebSite函数。注意:这是一个managedbean会话,但不会影响任何内容Java 套接字服务器cleint,java,sockets,jsf,Java,Sockets,Jsf,我有web应用程序JSF作为客户端,另一个java应用程序作为服务器。现在我有了一个startEngine()函数,它可以在服务器上启动应用程序,并且运行良好。我还有另一个叫做addWebSite的功能,它可以将一个网站添加到之前打开的同一个应用程序中。我对服务器的第一次调用有效,但第二次不行,我想在服务器上调用更多的函数 这是我的startEngine函数和addWebSite函数。注意:这是一个managedbean会话,但不会影响任何内容 public void startEgineNow
public void startEgineNow() throws UnknownHostException, IOException {
Session session = HibernateUtil.getSession();
try {
session.beginTransaction();
// get student from database
IPAddress myAddress = session.get(IPAddress.class, sendToSocketId);
session.getTransaction().commit();
if (myAddress.getIpAddress() != null) {
clientSocket = new Socket(myAddress.getIpAddress(), myAddress.getPortNumber());
PrintWriter out =
new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in =
new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()));
out.println("startEngine");
out.flush();
out.close();
}
} finally {
if (session != null) {
session.close();
}
}
}
public void addWebsite() throws UnknownHostException, IOException{
Session session = HibernateUtil.getSession();
System.out.println(sendToSocketId);
try {
session.beginTransaction();
// get student from database
IPAddress myAddress = session.get(IPAddress.class, sendToSocketId);
Sites sites = new Sites(addSite);
sites.setAddress(myAddress);
session.persist(sites);
session.getTransaction().commit();
if (myAddress.getIpAddress() != null) {
clientSocket = new Socket(myAddress.getIpAddress(), myAddress.getPortNumber());
PrintWriter out =
new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in =
new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()));
out.println("addWebSite");
out.flush();
out.close();
}
} finally {
if (session != null) {
session.close();
}
}
}
这是我的服务器端代码
public static void main(String[] args) throws InterruptedException, NumberFormatException, IOException {
MainListener myListener = new MainListener();
ServerSocket serverSocket =
new ServerSocket(5000);
Socket clientSocket = serverSocket.accept();
PrintWriter out =
new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
if (inputLine.equals("startEngine")) {
myListener.runDesktop();
}else if(inputLine.equals("addWebSite")){
myListener.addWebsite("https://www.buzzfeed.com/");
}
}
当我用startEngine方法启动引擎时,我希望服务器对其他调用保持打开状态。只有当我从客户机发送close()函数时才关闭,请问我在这里做错了什么您需要在一个循环中接受多个客户机,但我看不出这种客户机/服务器体系结构的意义,特别是因为您不知道如何实现它。您应该将服务器代码集成到webapp中,并通过方法调用直接调用它。所以我的问题是如何构建体系结构以接收其他请求。正如你所看到的,我已经回答了这个问题,我所看到的是,你正在着手一个不是最优的体系结构,你不知道如何实现。