在 java 中使用 JButton 向客户端发送消息
Sending message to a Client with JButton in java
我有一个 Java 程序,每当新客户端连接到我的服务器程序时,就会生成 运行 次 JButton。仅当单击为特定客户端分配的 JButton 时,我才需要向特定客户端发送消息。
void connect_clients()
{
try {
ServerSocket listener = new ServerSocket(7700);
jButton2.setText("Server Running!");
jButton2.setEnabled(false);
try {
while (true) {
socket = listener.accept();
try {
// System.out.println("Client connected from " + socket.getLocalAddress().getHostName());
clientIP= socket.getLocalAddress().getHostName();
buttons.add(new JButton(clientIP));
displayButton(buttons.get(clientNumber),clientNumber);
clientNumber++;
}
finally {
socket.close();
}
}
}
finally {
listener.close();
}
}
catch (IOException ex) {
Logger.getLogger(Test_Frame.class.getName()).log(Level.SEVERE, null, ex);
}
}
我试过类似的方法。
public void actionPerformed( ActionEvent e ) throws IOException{
if ( e.getSource() == buttons.get(1) )
{
String thisIP = buttons.get(1).getText();
PrintWriter out =
new PrintWriter(socket.getOutputStream(), true);
out.println("hey");
JOptionPane.showMessageDialog(null,"gfb");
}
}
这些是全球声明的:
String clientIP = "";
int clientNumber = 0;
ArrayList<JButton> buttons = new ArrayList<JButton>();
Socket socket;
这是您的代码修改为使用 TreeMap(排序的 HashMap)而不是 ArrayList,其中每个按钮都映射到一个套接字对象,请注意套接字不再是全局的。如果有什么不清楚的地方,请告诉我。
int clientNumber = 0;
TreeMap buttonsMap = new TreeMap();
buttonListener blistener = new buttonListener();
void connect_clients()
{
try {
ServerSocket listener = new ServerSocket(7700);
jButton2.setText("Server Running!");
jButton2.setEnabled(false);
try {
while (true) {
Socket socket = listener.accept();
try {
// System.out.println("Client connected from " + socket.getLocalAddress().getHostName());
String clientIP= socket.getLocalAddress().getHostName();
JButton button = new JButton(clientIP);
button.addActionListener(blistner);
buttonsMap.put(button, socket);
displayButton(button,clientNumber);
clientNumber++;
}
catch(Exception e)
{
}
}
}
finally {
listener.close();
}
}
catch (IOException ex) {
Logger.getLogger(Test_Frame.class.getName()).log(Level.SEVERE, null, ex);
}
}
private class buttonListener implements ActionListener
{
public void actionPerformed( ActionEvent e ) throws IOException{
if ( JButton button= e.getSource())
{
Socket socket = (Socket)buttonsMap.get(button);
PrintWriter out =
new PrintWriter(socket.getOutputStream(), true);
out.println("hey");
JOptionPane.showMessageDialog(null,"gfb");
}
}
}
我有一个 Java 程序,每当新客户端连接到我的服务器程序时,就会生成 运行 次 JButton。仅当单击为特定客户端分配的 JButton 时,我才需要向特定客户端发送消息。
void connect_clients()
{
try {
ServerSocket listener = new ServerSocket(7700);
jButton2.setText("Server Running!");
jButton2.setEnabled(false);
try {
while (true) {
socket = listener.accept();
try {
// System.out.println("Client connected from " + socket.getLocalAddress().getHostName());
clientIP= socket.getLocalAddress().getHostName();
buttons.add(new JButton(clientIP));
displayButton(buttons.get(clientNumber),clientNumber);
clientNumber++;
}
finally {
socket.close();
}
}
}
finally {
listener.close();
}
}
catch (IOException ex) {
Logger.getLogger(Test_Frame.class.getName()).log(Level.SEVERE, null, ex);
}
}
我试过类似的方法。
public void actionPerformed( ActionEvent e ) throws IOException{
if ( e.getSource() == buttons.get(1) )
{
String thisIP = buttons.get(1).getText();
PrintWriter out =
new PrintWriter(socket.getOutputStream(), true);
out.println("hey");
JOptionPane.showMessageDialog(null,"gfb");
}
}
这些是全球声明的:
String clientIP = "";
int clientNumber = 0;
ArrayList<JButton> buttons = new ArrayList<JButton>();
Socket socket;
这是您的代码修改为使用 TreeMap(排序的 HashMap)而不是 ArrayList,其中每个按钮都映射到一个套接字对象,请注意套接字不再是全局的。如果有什么不清楚的地方,请告诉我。
int clientNumber = 0;
TreeMap buttonsMap = new TreeMap();
buttonListener blistener = new buttonListener();
void connect_clients()
{
try {
ServerSocket listener = new ServerSocket(7700);
jButton2.setText("Server Running!");
jButton2.setEnabled(false);
try {
while (true) {
Socket socket = listener.accept();
try {
// System.out.println("Client connected from " + socket.getLocalAddress().getHostName());
String clientIP= socket.getLocalAddress().getHostName();
JButton button = new JButton(clientIP);
button.addActionListener(blistner);
buttonsMap.put(button, socket);
displayButton(button,clientNumber);
clientNumber++;
}
catch(Exception e)
{
}
}
}
finally {
listener.close();
}
}
catch (IOException ex) {
Logger.getLogger(Test_Frame.class.getName()).log(Level.SEVERE, null, ex);
}
}
private class buttonListener implements ActionListener
{
public void actionPerformed( ActionEvent e ) throws IOException{
if ( JButton button= e.getSource())
{
Socket socket = (Socket)buttonsMap.get(button);
PrintWriter out =
new PrintWriter(socket.getOutputStream(), true);
out.println("hey");
JOptionPane.showMessageDialog(null,"gfb");
}
}
}