【发布时间】:2020-10-20 02:55:01
【问题描述】:
我是套接字方面的新手,我想知道如何从客户端应用程序的几个文本字段中获取写入的内容,并根据它们来自的文本字段将该数据放入服务器应用程序中的标签中.
到目前为止,我已经在客户端和服务器之间建立了连接,当您按下客户端类中的按钮时,您可以从文本字段发送字符串并成功地将其写入位于服务器类的标签中。
这里有客户端类
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
class Client extends JFrame implements ActionListener{
JTextField field1;
JTextField field2;
JPanel panel;
JButton btnStart;
JLabel lblText;
public Client(){
panel = new JPanel();
panel.setLayout(null);
lblText=new JLabel("CLIENT");
lblText.setBounds(75,0,150,30);
field1=new JTextField(20);
field1.setBounds(10,40,225,30);
field2=new JTextField(20);
field2.setBounds(10,80,225,30);
btnStart=new JButton("Send");
btnStart.setBounds(75,100,75,30);
btnStart.addActionListener(this);
panel.add(btnStart);
panel.add(field1);
panel.add(field2);
panel.add(lblText);
this.add(panel);
this.setBounds(600,300,275,500);
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent event){
if(event.getSource() == this.btnStart){
try {
Socket socket = new Socket("192.168.1.90",9000);
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.writeUTF(field1.getText());
out.close();
field1.setText("");/*
DataOutputStream out2 = new DataOutputStream(socket.getOutputStream());
out2.writeUTF(field2.getText());
out2.close();
*/
}catch (Exception e) {
System.out.println("Connection failed");
}
}
}
}
服务器类
import javax.swing.*;
import java.awt.*;
import java.net.*;
import java.io.*;
class Server extends JFrame implements Runnable{
JLabel lblUsername;
JLabel lblNss;
JPanel panel;
Thread thread1;
public Server(){
panel= new JPanel();
panel.setLayout(null);
lblUsername = new JLabel("");
lblUsername.setBounds(0,0,150,30);
lblNss = new JLabel("");
lblNss.setBounds(0,40,150,30);
panel.add(lblUsername);panel.add(lblNss);
thread1 = new Thread(this);
thread1.start();
this.add(panel);
this.setBounds(1200,300,280,350);
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void run(){
try {
ServerSocket server = new ServerSocket(9000);
while(true){
Socket socket = server.accept();
DataInputStream in = new DataInputStream(socket.getInputStream());
String text_message = in.readUTF();
lblUsername.setText(text_message);
//lblNss.setText();
socket.close();
}
}catch (Exception e) {
e.printStackTrace();
}
}
}
【问题讨论】:
-
我的错,我已经翻译了帖子
-
你的对象和变量也应该有英文名称。
-
@MoritzSchmidt 不是真的,只要描述是英文的,如果你愿意,你可以使用法文的代码,但它应该足够紧凑以适合minimal reproducible example,这样很容易了解并隔离问题。英文代码不是必须的。
-
要发送多个字符串,您需要创建自己的自定义对象,将文本字段中的所有信息添加到它,然后发送对象,在服务器端,使用该对象字段来填充标签。
-
@Frakcool 感谢您的反馈,它确实帮助我解决了我的问题
标签: java swing sockets server client