Socket UDP通信 客户端给服务端发送数据

直接把代码贴出来,里面有详细的注释

  //客户端发送数据

    public class SocketSend {
        public static Socket socket = null;
        private static String TAG = "send";
        public interface SendListener {
            void OnResult(String ip, String result);
        }
        private static SendListener sendListener = null;
        public static void setListener(SendListener l) {
            sendListener = l;
        }
        //sendmsg
        public static void sendMsg(String server, int port, String msg)
                throws Exception {
            try {
                LogUtils.d(TAG, " sendMsg Connected to server " + server + " port:"
                        + port + " msg:" + msg);
            } catch (Exception e) {
                LogUtils.e(TAG, "", e);
            }
            socket = null;
            byte[] data = msg.getBytes();
            socket = new Socket(server, port);
            LogUtils.d(TAG, "Connected to server ... sending echo string");
            InputStream in = socket.getInputStream();
            OutputStream out = socket.getOutputStream();
            out.write(data);
            int bytesRcvd;// Bytes received in last read
            byte[] b = new byte[4096];
            StringBuilder builder = new StringBuilder();
            while ((bytesRcvd = in.read(b)) != -1) {
                LogUtils.d(TAG, "recvMsgSize:" + bytesRcvd);
                String res = new String(b).trim();
                builder.append(res);
                if (res.endsWith("</msg>")) {
                    break;
                }
            }
            LogUtils.d(TAG, "Received:" + builder);
            sendListener.OnResult(server, builder.toString());
            if (in != null) {
                in.close();
            }
            if (out != null) {
                out.close();
            }
            if (socket != null) {
                socket.close();
            }
        }
    }
    //服务端读取客户端发送的数据
    public void readSocket(int port) {
        while (true) {
            ServerSocket serverSocket = null;
            Socket skt;
            StringBuilder builder = new StringBuilder();
            byte[] receiveBuf = new byte[1024];
            try {
                serverSocket = new ServerSocket(port);
                serverSocket.setReuseAddress(true);
                Log.e(TAG, "手机作为服务端监听PC端连接");
                skt = serverSocket.accept();
                Log.e(TAG, "收到PC信息");
                InetSocketAddress clientAddress = (InetSocketAddress) skt
                        .getRemoteSocketAddress();
                Log.d(TAG, " PC端已连接到手机 端地址:" + clientAddress);
                int recvMsgSize;
                InputStream in = skt.getInputStream();
                OutputStream out = skt.getOutputStream();
                while ((recvMsgSize = in.read(receiveBuf)) != -1) {
                    Log.e(TAG, "Box is Service recvMsgSize:" + recvMsgSize);
                    String res = new String(receiveBuf).trim();
                    builder.append(res);
                    if (res.endsWith("</msg>")) {
                        break;
                    }
                }
                Log.e(TAG, "接收PC端发回的数据为:" + builder.toString());
                handleMessage("", builder.toString());
                String XML = "";
                if (builder.toString().contains("throughput")) {
                    XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
                            + "<msg>\n" + "<cmd>ret</cmd>\n" + "<result>"
                            + "ok" + "</result>\n" + "<sender>stb</sender>\n"
                            + "</msg>\n";
                } else {
                    XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
                            + "<msg>\n" + "<cmd>ret</cmd>\n" + "<result>"
                            + "throughput_ok" + "</result>\n"
                            + "<sender>stb</sender>\n" + "</msg>\n";
                }
                // 接收完毕后回写OK给服务端
                out.write(XML.getBytes(), 0, XML.getBytes().length);
                Log.e(TAG, "盒子写回OK消息给PC端 " + XML);
            } catch (Exception e) {
                Log.e(TAG, "", e);
                e.printStackTrace();
                // reConnectWiFi(); // 重新建立服务端
            } finally {
                if (serverSocket != null) {
                    try {
                        serverSocket.close();
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                }
            }
        }
    }

 有什么疑问欢迎提问,谢谢您的阅读

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值