A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 我是楠楠 于 2017-8-17 11:00 编辑

找工作,怎么才能拿到高薪offer,对于没有工作过、没有面试过的学员们,当天面试回来一定要总结。面试题一定要记下来,有笔试题就更好了,直接手机拍下来,晚上回来总结;不懂的可以问老师去群里面交流或者是查资料,把整理好的面试题共享,让其他小伙伴看到,每个人都这样做,日积月累我们就会有一个庞大的面试题库,受益你我他。一句话:面试——>总结——>分享。





android端实现:使用TCP协议通信
protected void connectServerWithTCPSocket() {   
        Socket socket;  
        try {//
创建一个Socket对象,并指定服务端的IP及端口号  
            socket = newSocket("192.168.1.32", 1989);  
           // 创建一个InputStream用户读取要发送的文件。  
            InputStream inputStream =new FileInputStream("e://a.txt");  
            // 获取Socket的OutputStream对象用于发送数据。  
            OutputStream outputStream =socket.getOutputStream();  
            // 创建一个byte类型的buffer字节数组,用于存放读取的本地文件  
           byte buffer[] = new byte[4 *1024];  
            int temp = 0;  
            // 循环读取文件  
            while ((temp =inputStream.read(buffer)) != -1) {  
                // 把数据写入到OuputStream对象中  
               outputStream.write(buffer, 0, temp);  
            }  
           // 发送读取的数据到服务端  
           outputStream.flush();  

            /** 或创建一个报文,使用BufferedWriter写入,看你的需求 **/  
//          String socketData ="[2143213;21343fjks;213]";  
//          BufferedWriter writer = newBufferedWriter(new OutputStreamWriter(  
//                 socket.getOutputStream()));  
//         writer.write(socketData.replace("\n", " ") +"\n");  
//          writer.flush();  
           /************************************************/  
        } catch (UnknownHostException e){  
                e.printStackTrace();  
        } catch (IOException e) {  
           e.printStackTrace();  
        }  

    }  


服务器端简单实现:
public void ServerReceviedByTcp() {  
   // 声明一个ServerSocket对象  
    ServerSocket serverSocket = null;  
    try {  
        // 创建一个ServerSocket对象,并让这个Socket在1989端口监听  
       serverSocket = new ServerSocket(1989);  
       // 调用ServerSocket的accept()方法,接受客户端所发送的请求,  
        // 如果客户端没有发送数据,那么该线程就停滞不继续  
       Socket socket = serverSocket.accept();  
        // 从Socket当中得到InputStream对象  
        InputStream inputStream =socket.getInputStream();  
        byte buffer[] = new byte[1024 *4];  
        int temp = 0;  
        // 从InputStream当中读取客户端所发送的数据  
        while ((temp = inputStream.read(buffer))!= -1) {  
            System.out.println(newString(buffer, 0, temp));  
        }  
        serverSocket.close();  
    } catch (IOException e) {  
        e.printStackTrace();  
    }  
}


客户端发送数据实现:使用UDP协议通信
protected void connectServerWithUDPSocket() {  

    DatagramSocket socket;  
    try {  
        //创建DatagramSocket对象并指定一个端口号,注意,如果客户端需要接收服务器的返回数据,  
       //还需要使用这个端口号来receive,所以一定要记住  
        socket = newDatagramSocket(1985);  
        //使用InetAddress(Inet4Address).getByName把IP地址转换为网络地址   
       InetAddress serverAddress = InetAddress.getByName("192.168.1.32");  
       //Inet4Address serverAddress = (Inet4Address)Inet4Address.getByName("192.168.1.32");   
       String str = "[2143213;21343fjks;213]";//设置要发送的报文   
       byte data[] = str.getBytes();//把字符串str字符串转换为字节数组   
       //创建一个DatagramPacket对象,用于发送数据。   
        //参数一:要发送的数据  参数二:数据的长度  参数三:服务端的网络地址  参数四:服务器端端口号   
       DatagramPacket packet = new DatagramPacket(data,data.length ,serverAddress ,10025);   
       socket.send(packet);//把数据发送到服务端。   
    } catch (SocketException e) {  
        e.printStackTrace();  
   } catch (UnknownHostException e) {  
        e.printStackTrace();  
    } catch (IOException e) {  
        e.printStackTrace();  
   }   
}   

客户端接收服务器返回的数据:
public void ReceiveServerSocketData() {  
    DatagramSocket socket;  
    try {  
        //实例化的端口号要和发送时的socket一致,否则收不到data  
        socket = newDatagramSocket(1985);  
       byte data[] = new byte[4 * 1024];  
       //参数一:要接受的data 参数二:data的长度  
       DatagramPacket packet = new DatagramPacket(data,data.length);  
        socket.receive(packet);  
        //把接收到的data转换为String字符串  
        String result = newString(packet.getData(), packet.getOffset(),  
               packet.getLength());  
        socket.close();//不使用了记得要关闭  
        System.out.println("the number ofreveived Socket is  :" + flag  
                +"udpData:" + result);  
    } catch (SocketException e) {  
        e.printStackTrace();  
    } catch (IOException e) {  
        e.printStackTrace();  
    }  
}  

服务器接收客户端实现:
public void ServerReceviedByUdp(){  
    //创建一个DatagramSocket对象,并指定监听端口。(UDP使用DatagramSocket)   
    DatagramSocket socket;  
    try {  
       socket = new DatagramSocket(10025);  
       //创建一个byte类型的数组,用于存放接收到得数据   
       byte data[] = new byte[4*1024];   
        //创建一个DatagramPacket对象,并指定DatagramPacket对象的大小   
       DatagramPacket packet = newDatagramPacket(data,data.length);   
        //读取接收到得数据   
        socket.receive(packet);   
        //把客户端发送的数据转换为字符串。   
        //使用三个参数的String方法。参数一:数据包参数二:起始位置 参数三:数据包长   
        String result = newString(packet.getData(),packet.getOffset() ,packet.getLength());   
    } catch (SocketException e) {  
        e.printStackTrace();  
    } catch (IOException e) {  
        e.printStackTrace();  
    }   
}  
总结:

使用UDP方式android端和服务器端接收可以看出,其实android端和服务器端的发送和接收大庭相径,只要端口号正确了,相互通信就没有问题,TCP使用的是流的方式发送,UDP是以包的形式发送。

1 个回复

倒序浏览
多谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马