【转】Andorid中使用Socket通讯

原文地址:http://blog.csdn.net/haokaihaohe110/article/details/7105889
http://blog.csdn.net/liwei3gjob/article/details/7939676
http://zhidao.baidu.com/link?url=d_vOxhDKiiAr4YX_z8uMuesoJ-4M7tF6K3hjYHXS1pVhmF5qBe9wA0ts3k9Kk9SlTQn94OP6Rfk-GLEEnwCYpSCuQm_gRMRliLv1QeNPdcG

通信代码:

 UDP通信实现:  

UDP使用DatagramSocket对象来实现  

UDP的客户端代码实现如下:  

 

   public static void main(String[] args)
            {try{//首先创建一个DatagramSocket对象
                    DatagramSocket socket = new DatagramSocket(4567);
                    //创建一个InetAddress
                    InetAddress serverAddress = InetAddress.getByName("192.168.1.104");
                    String str = "hello";
                    //这是要传输的数据
                    byte data[] = str.getBytes();
                    //把传输内容分解成字节
                    //创建一个DatagramPacket对象,并指定要讲这个数据包发送到网络当中的哪个地址,以及端口号
                    DatagramPacket packet = new DatagramPacket(data, data.length, serverAddress, 4567);
                    //调用socket对象的send方法,发送数据
                    socket.send(packet);
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }

  UDP的服务端代码实现如下: 

 


  
//创建一个DatagramSocket对象,并指定监听的端口号  
  
              DatagramSocket socket = new DatagramSocket(4567);  
  
              byte data [] = new byte[1024];  
  
              //创建一个空的DatagramPacket对象  
  
               DatagramPacket packet =   
  
new DatagramPacket(data,data.length);  
  
              //使用receive方法接收客户端所发送的数据,  
  
              //如果客户端没有发送数据,该进程就停滞在这里  
  
              socket.receive(packet);  
  
              String result = new   
  
String(packet.getData(),packet.getOffset(),  
  
packet.getLength());  
  
        System.out.println("result--->" + result);  
  

 


   
  
5、  TCP通信的实现:  
  
TCP使用Socket对象  
  
   
  
TCP协议客户端实现:  
  
//创建一个Socket对象,指定服务器端的IP地址和端口号  
  
           Socket socket = new Socket("192.168.1.104",4567);  
  
           //使用InputStream读取硬盘上的文件  
  
           InputStream inputStream = new  
  
 FileInputStream("f://file/words.txt");  
  
           //从Socket当中得到OutputStream  
  
           OutputStream outputStream = socket.getOutputStream();  
  
           byte buffer [] = new byte[4*1024];  
  
           int temp = 0 ;  
  
           //将InputStream当中的数据取出,并写入到OutputStream当中  
  
           while((temp = inputStream.read(buffer)) != -1){  
  
              outputStream.write(buffer, 0, temp);  
  
           }  
  
           outputStream.flush();  
  
       }   
  
   TCP协议服务器端现实:  
  
       //声明一个ServerSocket对象  
  
        ServerSocket serverSocket = null;  
  
        try {  
  
                //创建一个ServerSocket对象,并让这个Socket在4567端口监听  
  
              serverSocket = new ServerSocket(4567);  
  
        //调用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(new String(buffer,0,temp));  
  
              }  
  
           } catch (IOException e) {  
  
              // TODO Auto-generated catch block  
  
              e.printStackTrace();  
  
           }  
  
            serverSocket.close();  
  
           }   
 需要注意的是,在Manifest.xml文件当中,需要对互联网的访问进行授权。
还有onCreate中需要添加以下代码


    

//以下是所加的代码

    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() 

        .detectDiskReads() 

        .detectDiskWrites() 

        .detectNetwork()

        .penaltyLog() 

        .build()); 

        StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() 

        .detectLeakedSqlLiteObjects() 

        .detectLeakedClosableObjects() 

        .penaltyLog() 

        .penaltyDeath() 

        .build()); 

最后别忘了添加权限

<uses-permission  android:name="android.permission.INTERNET"/>  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值