java连接数据库时,为什么会报端口占用的错

java连接数据库时,为什么会报端口占用的错,第1张

主机的地址就是作为服务器的IP地址!要是连接你自己的就直接用localhost或是127001都可以!要是连接其他的!就该城相应的IP就可以!

oracle端口号是1521,mysql端口号是3306,sql server端口号是1433,我们一般使用的也就这几中数据库!记住这三个端口号就可以了!记住!这些端口号都是默认的!是可以更改的!

1端口占用编译器会报错,可以从错误看出来是不是端口被占用。没有专门的检测工具和方法

2DatagramSocket(在Java中使用UDP协议编程的相关类)

用于接收和发送UDP的Socket实例。该类有3个构造函数:

DatagramSocket():通常用于客户端编程,它并没有特定监听的端口,仅仅使用一个临时的。程序会让 *** 作系统分配一个可用的端口。

DatagramSocket(int port):创建实例,并固定监听Port端口的报文。通常用于服务端

DatagramSocket(int port, InetAddress localAddr):这是个非常有用的构建器,当一台机器拥有多于一个IP地址的时候,由它创建的实例仅仅接收来自LocalAddr的报文。

DatagramSocket具有的主要方法如下:

1)receive(DatagramPacket d):接收数据报文到d中。receive方法产生一个“阻塞”。“阻塞”是一个专业名词,它会产生一个内部循环,使程序暂停在这个地方,直到一个条件触发。

 2)send(DatagramPacket dp):发送报文dp到目的地。

 3)setSoTimeout(int timeout):设置超时时间,单位为毫秒。

 4)close():关闭DatagramSocket。在应用程序退出的时候,通常会主动释放资源,关闭Socket,但是由于异常地退出可能造成资源无法回收。所以,应该在程序完成时,主动使用此方法关闭Socket,或在捕获到异常抛出后关闭Socket。

希望对您有帮助谢谢

public class TestPort

{

    public static void main(String[] args)

    {

        Systemoutprintln(getPID("3306"));//得到进程ID,3306是端口名称

        Systemoutprintln(getProgramName(getPID("3306")));//根据进程ID得到映像名称

        killTask(getProgramName(getPID("3306")));//根据映像名称关闭进程

    }

    

    

    // 得到进程ID

    public static String getPID(String port){

        InputStream is = null;

        BufferedReader br = null;

        String pid = null;

        try

        {

            String[] args = new String[]{"cmdexe","/c","netstat -aon|findstr",port};

            is = RuntimegetRuntime()exec(args)getInputStream();

            br = new BufferedReader(new InputStreamReader(is));

            String temp = brreadLine();

            if(temp != null){

                String[] strs = tempsplit("\\s");

                pid=strs[strslength-1];

            }

        }

        catch (IOException e)

        {

            eprintStackTrace();

        }finally{

            try

            {

                brclose();

            }

            catch (IOException e)

            {

                eprintStackTrace();

            }

        }

        return pid;

    }

    

    //根据进程ID得到映像名称

    public static String getProgramName(String pid){

        InputStream is = null;

        BufferedReader br = null;

        String programName = null;

        try

        {

            String[] args = new String[]{"cmdexe","/c","tasklist|findstr",pid};

            is = RuntimegetRuntime()exec(args)getInputStream();

            br = new BufferedReader(new InputStreamReader(is));

            String temp = brreadLine();

            if(temp != null){

                String[] strs = tempsplit("\\s");

                programName=strs[0];

            }

        }

        catch (IOException e)

        {

            eprintStackTrace();

        }finally{

            try

            {

                brclose();

            }

            catch (IOException e)

            {

                eprintStackTrace();

            }

        }

        return programName;

    }

    

    //根据映像名称关闭进程

    public static void killTask(String programName){

        String[] args = new String[]{"Taskkill","/f","/IM",programName};

        try

        {

            RuntimegetRuntime()exec(args);

        }

        catch (IOException e)

        {

            eprintStackTrace();

        }

    }

}

//题主自己看看具体怎么get它的ip地址,好久没有写,不知道了

你是因为什么原因要终止这个线程的呢?直接把这个serverSocket close掉不行么?

如果你是因为程序出错,端口又被占用。可以这样查杀占用端口的进程。。。

netstat -na -o 找到占用1234端口的进程号

taskkill /pid 进程号

这样就可以杀死那个进程了····

如果是要在程序中控制的话,用close方法,然后把那个serverSocket置为null应该就可以了吧。。。

而且楼上说得对,你的程序本来就有问题,serverSocket 的实例话就不应该也在循环里面,估计你是接受到一个客户端以后,new 一个serverSocket ,继续绑定1234端口报错,所以才来提问的。这个是你程序的问题,并不需要去杀死那个什么线程。。。

以上就是关于java连接数据库时,为什么会报端口占用的错全部的内容,包括:java连接数据库时,为什么会报端口占用的错、java中如何检测本机指定的UDP服务端口是否被占用并且自动分配一个可用udp端口;、被占用的端口如何通过Java代码查出是那个ip占用的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10132039.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存