gpt4 book ai didi

java - UDP多线程服务器设计问题

转载 作者:行者123 更新时间:2023-12-02 03:57:23 25 4
gpt4 key购买 nike

我正在为 UDP 多线程服务器编写一个程序。我已经根据从堆栈溢出中获取的输入和伪代码编写了引用。当我执行程序时,我的计算机挂起。有人可以纠正这个问题吗?使用下面的代码并为我提供编写处理多线程的 UDP 服务器的最佳解决方案。

public class MyownServer extends JFrame{

private JTextArea jta = new JTextArea();
public static void main(String[] args) throws Exception {
new MyownServer();
}
public MyownServer(){
add(new JScrollPane(jta), BorderLayout.CENTER);
setVisible(true);
setSize(400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("Server");// It is necessary to show the frame here!
try{
DatagramSocket firstsocket = new DatagramSocket(8100);;
int id = 0;
while (true) {
byte[] buf = new byte[256];
DatagramPacket receivePacket =
new DatagramPacket(buf, buf.length);
ClientServiceThread cliThread = new ClientServiceThread(firstsocket, receivePacket);
cliThread.start();
}
}
catch(IOException ex) {
ex.printStackTrace();
}
}
}

public class ClientServiceThread extends Thread {
private JTextArea jta = new JTextArea();
DatagramPacket packet;;
boolean running = true;
DatagramPacket sendPacket;
DatagramSocket socket;;

byte[] buf;

ClientServiceThread(DatagramSocket socket,DatagramPacket packet) {
this.socket=socket;
this.packet=packet;
}
public void run()
{
try {
// Compute and process
byte[] data = new byte[256];
DatagramPacket response = new DatagramPacket(data, data.length);
socket.receive(packet);

double rate = Double.parseDouble(new String(buf).trim());
sendPacket.setAddress(packet.getAddress());
sendPacket.setPort(packet.getPort());
socket.send(sendPacket);
socket.receive(packet);
double years = Double.parseDouble(new String(buf).trim());
socket.send(sendPacket);
socket.receive(packet);
double loan = Double.parseDouble(new String(buf).trim());

double monthlyPayment = loan * (rate / 1200) / (1 - (Math.pow(1 / (1 + (rate / 1200)), years * 12)));
double totalPayment = monthlyPayment * years * 12;

sendPacket.setData(new Double((double)(monthlyPayment * 100) / 100.00).toString().getBytes());
socket.send(sendPacket);
socket.receive(packet);
sendPacket.setData(new Double((double)(totalPayment * 100) / 100.00).toString().getBytes());
socket.send(sendPacket);
socket.close();
jta.append("Interest Rate is " + rate + '\n');
jta.append("Number Of years " + years + '\n');
jta.append("Loan Amount is " + loan + '\n');
jta.append("Monthly payment " + monthlyPayment + '\n');
jta.append("Total Payment " + totalPayment + '\n');
} catch (Exception e) {
e.printStackTrace();
}
}
}

感谢您的帮助。提前致谢。

最佳答案

这部分就在那里永远创建一个又一个线程。

            while (true) {
byte[] buf = new byte[256];
DatagramPacket receivePacket
= new DatagramPacket(buf, buf.length);
ClientServiceThread cliThread = new ClientServiceThread(firstsocket, receivePacket);
cliThread.start();
}

您应该使用 ThreadPool .

关于java - UDP多线程服务器设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35310678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com