Android Socket编程

一、什么是Socket

Socket的英文原意是“插座”

所谓socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。

应用程序通常通过“套接字”向网络发出请求或者应答网络请求。

image

其实学到Java网络编程的都知道,TCP、UDP、输入输出流这些概念,下面我就不再详细说明了。

二、TCP

服务器端代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//声明一个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();
            }
            finally{
                try {
                    serverSocket.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

客户端代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
try{
  Scoket socket = new Socket("127.0.0.1",4567);
  InputStream inputStram = new FileInputStream("****/*.txt");
  OutputStream outputStream = socket.getOutputStream();
  byte buffer[] = new byte[1024];
  int temp = 0;
  while((temp = inputStram.read(buffer)) != -1){
    outputStream.write(buffer, 0, temp);
  }
  outputStream.flush();
}catch(Exception e){
  e.printStackTrace();
}

三、UDP

服务器端代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
try {
                //创建一个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);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

客户端代码:

1
2
3
4
5
6
7
8
9
10
11
12
try{
  //首先创建一个DatagramSocket对象
  DatagramSocket socket = InetAddress.getByName("127.0.0.1");
  String str = "hello";
  byte data[] = str.getBytes();
  //创建一个DatagramPacket对象,并指定要将这个数据包发送到网络中的哪个地址,以及端口号
  DatagramSocket packet = new DatagramSocket(data,data.length,serverAddress,4567);
  //调用socket对象的send方法,发送数据
  socket.send(packet);
}catch(Exception e){
  e.printStackTrace();
}

 

 

注意在AndroidManifest.xml中加入对网络的访问权限

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

除非注明,饮水思源博客文章均为原创,转载请以链接形式标明本文地址

本文地址:http://www.alonemonkey.com/android-socket.html

本文链接:http://www.alonemonkey.com/android-socket.html