猿问

用Socket二次发送消息失败,怎么办?

本人对socket真的是小白级的,因为程序要求才硬着头皮写了个函数,结果第一次引用函数时,socket还能发送消息,但之后一直都被阻塞(?)了,直到我把整个程序关掉才发送出去。来这里看看有没有大侠可以解答一下我的问题。
以下是该函数代码:

        Status<Area> status=new Status<Area>();

       

        InetAddress addr;

        addr = InetAddress.getByName(HOST_NAME);

        Socket mSocket;

        mSocket = new Socket(addr, PORT_NO);

        out = mSocket.getOutputStream();

        mFlag = true;

        

        try

        {

                Area a = new Area();

                byte typeChosen=(byte) 0xff;

                byte [] output=new byte[10];

                //**中间省略output的内容**

                out.write(output);

                

                InputStream mInput = null;

                byte[] buffer = new byte[65536];

                int size = -1;

                boolean flag=true;

                while (flag) {

                    try {

                    // 此处为测试代码,测试代码每次运行能成功执行。

                    //所以问题应该不在parseFrontEndMsg函数中,所以此函数我就不放上来了。

//                        if(flag){

//                            byte[] realBuffer = new byte[18];

//                            realBuffer=new byte[] {0x00,0x04,0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x09};

//                            parseFrontEndMsg(realBuffer,typeChosen);

//                            flag=false;

//                        }

                        if (size < 0) {

                            System.out.println("等待接收前置器发送信息....");

                        } else {

                            byte[] realBuffer = new byte[size];

                            System.arraycopy(buffer, 0, realBuffer, 0, size);

                            System.out.print("Message from front end: ");

                            printBytes(realBuffer);

                            parseFrontEndMsg(realBuffer,typeChosen);

                            flag=false;

                        }

UYOU
浏览 601回答 2
2回答

皈依舞

你想要完成什么样的逻辑呢?你这个程序看起来是这样:连接服务端,然后发送数据,之后进入while循环;阻塞读,读到数据之后做一些处理,把flag设成false,然后再阻塞在读上。
随时随地看视频慕课网APP

相关分类

Java
我要回答