【问题标题】:UDP client server average computing program [duplicate]UDP客户端服务器平均计算程序[重复]
【发布时间】:2020-11-29 08:29:30
【问题描述】:

我想编写一个代码,客户端向服务器发送 10 个整数,然后服务器计算这些数字的平均值,然后服务器将平均值发送回客户端我这样编写服务器代码,我必须使用特定的inet地址,我应该更改客户端和服务器之间的服务器端口吗?

import java.net.*;
import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;
public class UDP_SERVER {
        
    public static final int SERVICE_PORT = 7;
    public static final int BUFSIZE = 4096;
    byte[] bu = null;
    private DatagramSocket socket;
    public UDP_SERVER(){
        try{
            
            socket = new DatagramSocket( SERVICE_PORT );
           
        }
        catch (Exception e){
            System.err.println ("Unable to bind port");
        }
    }
    public void serviceClients(){
        int sum = 0;
        byte[] buffer = new byte[BUFSIZE];
        for (;;){
            try{
                InetAddress addr = InetAddress.getLocalHost() ;
                try{
                    
                    DatagramPacket packet = new DatagramPacket(buffer, BUFSIZE);
                    socket.receive(packet);
                    ByteArrayInputStream bin = new ByteArrayInputStream(buffer);
                    DataInputStream d1 = new DataInputStream((bin));
                    sum = sum + d1.readInt();
                    
                }
                
                catch (IOException ioe){
                    System.err.println ("Error : " + ioe);
                }
                
                double avg = sum / 10;
                String a1 = Double.toString(avg);
                bu = a1.getBytes();
                DatagramPacket Dps = new DatagramPacket(bu, bu.length,addr, SERVICE_PORT);
                socket.send(Dps);
            }
            
            catch (IOException ex){
                System.err.println ("Error : " + ex);
            }
        }
    }
    public static void main(String args[]){
        UDP_SERVER server = new UDP_SERVER();
        server.serviceClients();
    }
}

我该怎么办?我可以使用什么 inet 地址?

【问题讨论】:

  • 除了“无法绑定端口”之外,您是否得到任何有关错误的详细信息?请您复制并粘贴完整的错误消息
  • Unable to bind port Exception in thread "main" java.lang.NullPointerException at UDP_SERVER.serviceClients(UDP_SERVER.java:28) at UDP_SERVER.main(UDP_SERVER.java:54) Java 结果:1
  • 这不是真正的错误。将您的 System.err.println("Unable to bind port") 替换为 e.printStackTrace() 以查看真正的错误。另外,您能否告诉我们您使用的是哪个操作系统,因为错误可能取决于此?
  • java.net.BindException:地址已在使用中:无法在 UDP_SERVER.serviceClients(UDP_SERVER.java:28) 的 UDP_SERVER.main(UDP_SERVER. java:54) Java 结果:1
  • 我使用的是 windows 10

标签: java networking network-programming udp


【解决方案1】:

“BindException: Address already in use”表示另一个进程正在使用您尝试使用的端口。是否有另一个正在运行的程序副本,但您忘记停止了?

作为“快速修复”,请尝试使用其他端口,例如:

public static final int SERVICE_PORT = 7777;

如果您的程序没有使用端口 7,您可以使用 Windows 工具找到正在使用它的程序 - 请参阅 How can you find out which process is listening on a port on Windows?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 2012-01-04
    • 1970-01-01
    相关资源
    最近更新 更多