它应该在join
单击按钮时将数据发送到服务器,但它不会将数据发送到服务器并且不会在控制台中打印消息。为什么?
服务器
package clientServer;
import java.net.*;
import java.io.*;
public class Server {
private ServerView view;
private boolean serverOnline=false;
private ServerSocket server;
private InputStream serverInStream;
public Server(ServerView view)
{
this.view=view;
}
public void start()
{
//Manipulate model
System.out.println("Server is started");
//Optionally update view
Socket listenPort;
try
{
this.server=new ServerSocket(13131);
while(this.serverOnline)
{
listenPort=this.server.accept();
this.serverInStream=listenPort.getInputStream();
BufferedReader bfw=new BufferedReader(new InputStreamReader(this.serverInStream));
System.out.println(bfw.readLine());
this.serverInStream.close();
}
}
catch(IOException e)
{
System.err.println(e);
}
finally
{
this.serverOnline=true;
}
}
public void stop()
{
try
{
this.serverOnline=false;
this.server.close();
}
catch(IOException e)
{
System.err.println("Problem in stopping server" + e);
}
finally
{
System.out.println("Server has been stopped");
}
}
}
服务器视图
package clientServer;
import javax.swing.*;
import java.awt.*;
public class ServerView {
private JFrame window;
private Container holder;
private JButton serverButton;
private JLabel label;
private JPanel panel;
private JButton serverJoinButton;
private ServerController controller;
public ServerView(ServerController controller) {
this.controller = controller;
this.window = new JFrame("Twenty nine");
this.panel = new JPanel();
this.holder = this.window.getContentPane();
this.serverButton = new JButton("start");
this.serverButton.setActionCommand("start");
this.serverButton.addActionListener(this.controller);
this.label = new JLabel("Serever is offline");
this.holder.add(this.panel);
this.panel.add(this.label);
this.panel.add(this.serverButton);
this.window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.window.setSize(800, 900);
// this.window.setLayout(new BorderLayout());
this.window.setVisible(true);
}
public void start() {
this.label.setText("Server is online");
this.serverButton.setActionCommand("stop");
this.serverButton.setText("stop");
//Adds join buttton
this.serverJoinButton = new JButton("Join");
this.serverJoinButton.setText("join");
this.serverJoinButton.addActionListener(this.controller);
this.panel.add(this.serverJoinButton);
//this.panel.repaint();
this.panel.revalidate();
}
public void stop()
{
this.label.setText("Server is offline");
this.serverButton.setActionCommand("start");
this.serverButton.setText("start");
this.panel.remove(this.serverJoinButton);
this.panel.repaint(); //Adding works properly removing dont
this.panel.revalidate();
}
}
服务器控制器
package clientServer;
import java.awt.event.*;
public class ServerController implements ActionListener {
private Server model;
private ServerView view;
public void setModel(Server server) {
this.model = server;
}
public void setView(ServerView view) {
this.view = view;
}
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand()=="start")
{
this.start();
}
else if(e.getActionCommand()=="stop")
{
this.stop();
}
else if(e.getActionCommand()=="join")
{
this.join();
}
}
public void start() {
//Reponse to event immidiately
this.view.start();
//Response and manipulate model
//Should start a new thread instead of using swing eventDispatch thread
this.model.start();
}
public void stop() {
//Reponse to event immidiately
this.view.stop();
//Response and manipulate model
this.model.stop();
}
public void join()
{
System.out.println("Client tries to connect");
Client cl=new Client();
cl.join();
}
}
客户
package clientServer;
import java.net.*;
import java.io.*;
public class Client {
private Socket socket;
public Client()
{
try
{
this.socket=new Socket("127.0.0.1",13131);
}
catch(UnknownHostException e)
{
System.err.println(e);
}
catch(IOException e)
{
System.err.println(e);
}
}
public void join()
{
System.out.println("Client join called");
System.out.println("Client socket is connected:" + this.socket.isConnected());
try
{
OutputStream op=this.socket.getOutputStream();
BufferedWriter bfw=new BufferedWriter(new OutputStreamWriter(op));
bfw.write("Client is connected \n");
bfw.close();
}
catch(IOException e)
{
System.err.println(e);
}
}
}