Java多线程聊天服务器 - 发送消息

时间:2016-11-05 13:04:19

标签: java multithreading sockets server chat

我正在尝试创建应该能够与许多客户端通信的多线程服务器。我在单独的线程中运行import matplotlib.pyplot as plt import matplotlib.patches from matplotlib.widgets import Slider fig=plt.figure() ax=fig.add_subplot(121, aspect="equal") ax_x = plt.axes([0.58, 0.75, 0.33, 0.03], axisbg="w") ax_y = plt.axes([0.58, 0.65, 0.33, 0.03], axisbg="w") ax_w = plt.axes([0.58, 0.55, 0.33, 0.03], axisbg="w") ax_h = plt.axes([0.58, 0.45, 0.33, 0.03], axisbg="w") ax_a = plt.axes([0.58, 0.35, 0.33, 0.03], axisbg="w") ax_t1 = plt.axes([0.58, 0.25, 0.33, 0.03], axisbg="w") ax_t2 = plt.axes([0.58, 0.15, 0.33, 0.03], axisbg="w") s_x = Slider(ax_x, 'x', -1, 1, valinit=0) s_y = Slider(ax_y, 'y', -1, 1, valinit=0) s_w = Slider(ax_w, 'width', 0, 2, valinit=0.5) s_h = Slider(ax_h, 'height', 0, 2, valinit=0.5) s_a = Slider(ax_a, 'angle', 0, 360, valinit=0) s_t1 = Slider(ax_t1, 'theta1', 0, 360, valinit=0) s_t2 = Slider(ax_t2, 'theta2', 0, 360, valinit=360) arc = matplotlib.patches.Arc( (0,0), width=0.5, height=0.5, linewidth=4, color="#bd3270") ax.add_patch(arc) def update(val): arc.center = (s_x.val, s_y.val) arc.width = s_w.val arc.height = s_h.val arc.angle = s_a.val arc.theta1 = s_t1.val arc.theta2 = s_t2.val ## this is the line to add arc._path = matplotlib.patches.Path.arc(s_t1.val , s_t2.val) fig.canvas.draw_idle() for s in [s_x,s_y, s_w, s_h, s_a, s_t1, s_t2]: s.on_changed(update) ax.set_xlim([-1,1]) ax.set_ylim([-1,1]) plt.show() ,接受所有连接并将所有传入套接字打包在一个同步ServerSocket中。这工作正常,我收到来自所有用户的消息。问题是发送消息。

我正在尝试使用来自单独类的一个静态方法ArrayList,一旦命中发送按钮就会调用该方法,并且该方法遍历我sendMessage() ArrayList中的所有套接字并发送消息但没有任何事情发生在客户身上:

clientSockets

这是一个在新客户端连接时调用的Thread:

public static void sendMessage(){
    String messageOut;

    messageOut = Graphics.writeMessage.getText(); //getting text from TextArea
    Graphics.writeMessage.setText(""); //clearing TextArea

    stateChanged("Message sent: ".concat(messageOut)); //changing state in another state TextArea

    clientSockets.stream().forEach((Socket socket) -> {
        //if (socket.isConnected() == true){
        try{
            out = new DataOutputStream(socket.getOutputStream());
            out.writeUTF(messageOut);
            out.flush();

        } catch (IOException ex) {
            Logger.getLogger(Pomocna.class.getName()).log(Level.SEVERE, null, ex);
        }
    });
}

如果有人能让我知道为什么这不起作用以及如何改进它,我将不胜感激。另外,我不太清楚静态方法是否适合做这些事情。非常感谢,希望我能够以明确的方式制定问题。

0 个答案:

没有答案