- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要修改代码,以便在客户端和服务器之间传递对象而不是单个数据。这就需要我定义自己的类Employee,并创建Employee类的对象在客户端和服务器之间传递
客户端类
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
public class MultiClient extends JFrame {
private JPanel contentPane;
private JTextField textField;
private JTextField textField_1;
private JTextField textField_2;
private JTextField textField_3;
/**
* Launch the application.
*/
// IO streams
private DataOutputStream toServer;
private DataInputStream fromServer;
public static void main(String[] args) {
Employee no1 = new Employee();
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
MultiClient frame = new MultiClient();
frame.setVisible(true);
frame.setTitle("Work Hard Client");
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public MultiClient() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 650);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JTextArea jta = new JTextArea();
jta.setBounds(12, 391, 408, 199);
contentPane.add(jta);
try {
// Create a socket to connect to the server
Socket socket = new Socket("localhost", 8000);
// Create an input stream to receive data from the server
fromServer = new DataInputStream(
socket.getInputStream());
// Create an output stream to send data to the server
toServer =
new DataOutputStream(socket.getOutputStream());
}
catch (IOException ex) {
jta.append(ex.toString() + '\n');
}
JLabel lblEnterMonths = new JLabel("Enter months:");
lblEnterMonths.setFont(new Font("Tahoma", Font.PLAIN, 16));
lblEnterMonths.setBounds(12, 36, 119, 29);
contentPane.add(lblEnterMonths);
JLabel lblEnterDays = new JLabel("Enter days:");
lblEnterDays.setFont(new Font("Tahoma", Font.PLAIN, 16));
lblEnterDays.setBounds(12, 100, 119, 29);
contentPane.add(lblEnterDays);
JLabel lblEnterPayrate = new JLabel("Enter payrate:");
lblEnterPayrate.setFont(new Font("Tahoma", Font.PLAIN, 16));
lblEnterPayrate.setBounds(12, 154, 119, 29);
contentPane.add(lblEnterPayrate);
JLabel lblEnterHours = new JLabel("Enter hours:");
lblEnterHours.setFont(new Font("Tahoma", Font.PLAIN, 16));
lblEnterHours.setBounds(12, 208, 119, 29);
contentPane.add(lblEnterHours);
textField = new JTextField();
textField.setFont(new Font("Tahoma", Font.PLAIN, 15));
textField.setBounds(233, 28, 187, 46);
contentPane.add(textField);
textField.setColumns(10);
textField_1 = new JTextField();
textField_1.setFont(new Font("Tahoma", Font.PLAIN, 15));
textField_1.setColumns(10);
textField_1.setBounds(233, 92, 187, 46);
contentPane.add(textField_1);
textField_2 = new JTextField();
textField_2.setFont(new Font("Tahoma", Font.PLAIN, 15));
textField_2.setColumns(10);
textField_2.setBounds(233, 146, 187, 46);
contentPane.add(textField_2);
textField_3 = new JTextField();
textField_3.setFont(new Font("Tahoma", Font.PLAIN, 15));
textField_3.setColumns(10);
textField_3.setBounds(233, 200, 187, 46);
contentPane.add(textField_3);
JButton btnCalulatePay = new JButton("Calulate Pay");
btnCalulatePay.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
int noMonths = (int)
((Double.parseDouble(textField.getText()))
);
toServer.writeInt(noMonths);
int noDays = (int)
((Double.parseDouble(textField_1.getText()))
);
toServer.writeInt(noDays);
double payRate = (double)
((Double.parseDouble(textField_2.getText()))
);
toServer.writeDouble(payRate);
double hours = (double)
((Double.parseDouble(textField_3.getText()))
);
toServer.writeDouble(hours);
double sum = (noMonths*noDays)*(payRate*hours);
// Send the pay to the server
toServer.flush();
// Get area pay the server
double Pay = fromServer.readDouble();
jta.append("Pay is " + sum+ "\n");
jta.append("Pay received from the server is "
+ sum + '\n');
}
catch (IOException ex) {
System.err.println(ex);
}
}
});
btnCalulatePay.setFont(new Font("Tahoma", Font.PLAIN, 14));
btnCalulatePay.setBounds(12, 305, 119, 25);
contentPane.add(btnCalulatePay);
JButton btnClear = new JButton("Clear");
btnClear.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
textField.setText(null);
textField_1.setText(null);
textField_2.setText(null);
textField_3.setText(null);
}
});
btnClear.setFont(new Font("Tahoma", Font.PLAIN, 14));
btnClear.setBounds(143, 305, 75, 25);
contentPane.add(btnClear);
JButton btnHelp = new JButton("Help");
btnHelp.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog (null, "Message", "Title", JOptionPane.INFORMATION_MESSAGE);
}
});
btnHelp.setFont(new Font("Tahoma", Font.PLAIN, 14));
btnHelp.setBounds(233, 305, 75, 25);
contentPane.add(btnHelp);
JButton btnExit = new JButton("Exit");
btnExit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
btnExit.setFont(new Font("Tahoma", Font.PLAIN, 14));
btnExit.setBounds(332, 306, 75, 25);
contentPane.add(btnExit);
}
}
服务器类
import java.awt.BorderLayout;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class MultiClientServer extends JFrame {
private JTextArea jta = new JTextArea();
public static void main(String[] args) {
Employee employee = null;
new MultiClientServer();
}
public MultiClientServer() {
setLayout(new BorderLayout());
add(new JScrollPane(jta), BorderLayout.CENTER);
setTitle("Work Hard Server");
setSize(500, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true); // It is necessary to show the frame here!
try {
ServerSocket serverSocket = new ServerSocket(8000);
jta.append("MultiThreadServer started at " + new Date() + '\n');
int clientNo = 1;
while (true) {
Socket socket = serverSocket.accept();
HandleAClient task = new HandleAClient(socket);
new Thread(task).start();
clientNo++;
}
}
catch(IOException ex) {
System.err.println(ex);
}
}
class HandleAClient implements Runnable {
private Socket socket;
/** Construct a thread */
public HandleAClient(Socket socket) {
this.socket = socket;
}
/** Run a thread */
public void run() {
try {
DataInputStream inputFromClient = new DataInputStream(
socket.getInputStream());
DataOutputStream outputToClient = new DataOutputStream(
socket.getOutputStream());
while (true) {
int noMonths = inputFromClient.readInt();
int noDays = inputFromClient.readInt();
double payRate = inputFromClient.readDouble();
double hours = inputFromClient.readDouble();
double sum = (noMonths*noDays)*(payRate*hours);
outputToClient.writeDouble(sum);
jta.append("Months received from client: " +
noMonths + '\n');
jta.append("Days received from client: " +
noDays + '\n');
jta.append("Rate received from client: " +
payRate + '\n');
jta.append("Hours received from client: " +
hours + '\n');
jta.append("pay calculated and sent is: " +
sum + '\n');
}
}
catch(IOException e) {
System.err.println(e);
}
}
}
}
员工类别
public class Employee implements Serializable {
private int noMonths;
private int noDays;
private double payRate;
private double hours;
Employee( int mon, int days, double pay, double hour )
{
noMonths = mon;
noDays = days;
payRate = pay;
hours = hour;
}
public Employee() {
// TODO Auto-generated constructor stub
}
public int getNoMonths() {
return noMonths;
}
public void setNoMonths(int noMonths) {
this.noMonths = noMonths;
}
public int getNoDays() {
return noDays;
}
public void setNoDays(int noDays) {
this.noDays = noDays;
}
public double getPayRate() {
return payRate;
}
public void setPayRate(double payRate) {
this.payRate = payRate;
}
public double getHours() {
return hours;
}
public void setHours(double hours) {
this.hours = hours;
}
}
最佳答案
我认为最简单的方法是使用 XStream 之类的东西这会将您的对象更改为 XML 格式。
然后您将使用 writeUTF(String s)
将 Employee
对象编写为 XML 字符串,然后使用 readUTF()
取回您的 XML 字符串。
然后您可以再次使用 XStream 将其更改回您的对象。
编辑:
根据您的评论,我的理解是您需要更改代码,以便不发送对象的属性值,而是编写对象本身。
我建议的方法将 Employee
对象更改为 XML 字符串。然后,您可以将 XML 字符串写入流中并读回,从而在服务器端得到一个 XML 字符串。
然后您将再次使用 XStream 将 XML 字符串更改为其相应的对象。
您可能可以使用其他方法,将 Employee
类序列化为字节数组并传输它。在我看来,这种方法的问题在于,如果您想通过其他语言连接到系统,它可能会导致问题,因为序列化可能会关闭。
XML 序列化至少允许您手动解析对象,这为您提供了后备计划。
关于java - 使用员工类在客户端和服务器之间传递的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32986303/
我希望通过 Workday API 检索 Workday 工作人员(又名员工)Web 配置文件 URL。用例是我正在构建一个聊天机器人来检索用户信息,并且我希望能够深度链接到工作人员(员工)网络配置文
我很困惑我希望员工 ID 是自动生成的前缀格式我知道在 sql server 中触发之前是可能的我正在关注帖子 http://www.aspdotnet-suresh.com/2012/04/set-
我读了一个教程,其中有这个结构: struct { char Name[25]; int Age; float SkillRating; } Employee; defines
我有两个表 employee(name,id) ,其中包含所有员工和另一个表 reader(id,date) ,它给出了日期和哪个员工在场。我如何找到一定范围内的缺席者列表日期? 对于特定日期,我能够
我需要员工 ID 的标准正则表达式,例如 EMP015 015EMP EMP_015 E_015 EMP-015 EMP.VIS EMP/056 基本上它应该允许 . 或 _ 或 - 或 / 在字母数
我是 Angular 的新手,正在使用 Angular 编写代码,我正在观看视频教程。我注意到我的代码中有一些东西,但我无法理解它是如何工作的。 我想知道这段代码是什么意思组件上的“员工:员工 []”
下面从HR角度,来分析员工离职成本,欢迎大家留言讨论。 一个员工离职后留下的坑,并不是再找一个人填上就万事大吉了。 一般来说,核心人才的流失,至少有1-2个月的招聘期、3个月的适应期,6个月的融入期;
我有两个表 Employee 和 Department 此图像显示每个员工的经理。我想编写一个 SQL 查询,为我提供所有主管(经理、经理的经理......)的列表。 我只想要一个列,在给定特定员工时
我想将 ER 图的这一部分转换为关系模型。我们有一个三元关系,它说的是以下内容: 1 位客户将 1 个项目提供给 -> 多个开发人员 1 位客户分配给 1 位开发人员 -> 多个项目 1 个开发人员被
我将要开发一个应用程序,该应用程序将使用一些基于 SOAP 的 Web 服务框架。我做了一些研究,我有点喜欢 Axis2C 框架,但在某些主题中,我发现原来的 Axis2C 实现存在内存泄漏问题,并且
我的 SQL 数据库中有两个表: 公司: ID(自增) 姓名 地址 ... 员工: ID(自增) 公司编号 internal_id 姓名 姓氏 问题是我想要一个与他们所属的公司相关的员工 ID (in
我试图在堆栈溢出和谷歌上找到这个问题的答案,但没有找到。如果有问题需要更正或重复问题,请告诉我。 当我计算员工对象 (emp_obj) 和员工类的大小时,在这两种情况下我都得到了 4 个字节。但是我不
问题 如何在 Angular 员工 component.html 上返回 EmployeeCode ? 示例数据引用表 Code tableName FieldName LabelText
我是 hibernate 新手,正在使用 hibernate 版本 4.3.4 JAR 文件。我正在尝试使用 intelliJ 社区版中的 mySQL 服务器执行简单的 Hibernate 程序。以下
我正在使用 laravel 5.4 和 Yajra Datatable,但我无法使其工作..我遇到了“Uncaught TypeError: $(...).DataTable is not a fun
我想创建一个小型示例应用程序,它可以读取我的员工徽章并将其显示在屏幕上(或者如果我可以复制它就更好了,这样我们就可以使用我们的手机徽章而不是我们的塑料身份证) 几个问题1. 这在技术上可行吗?如果是这
我有一个 person 对象,需要将它存储为 byte[] 并再次检索该 byte[] 并转换为 person 对象 并且 BinaryFormatter 在 Silverlight 中不可用 最佳答
最近开始学习oracle和sql。 在学习的过程中,我遇到了几个问题,我的 friend 在接受采访时被问到这些问题。 SELECT * FROM Employees WHERE NULL IS N
当我执行以下命令来创建分片时: mysqlfabric sharding add_table 1 employees.employees emp_no 我收到以下错误: DatabaseError:
这是我的表格 门票 tic_id, tic_cat tic_priority tic_cus tic_date tic_title tic_
我是一名优秀的程序员,十分优秀!