以下内容来自对mars老师android视频的学习,纯属个人学习笔记,谨以此鼓励自己学习!!
————
感谢mars老师无私的奉献
我的android学习笔记25—Socket
一、基本概念
Socket:用于描叙ip地址和端口,是一个通信连的句柄;应用程序通常通过socket向网络发出请求或者应答网络请求。
UDP
(User Datagram Protocol)
:
用户数据报协议,无连接,面向报文,尽最大努力交付,没有拥塞控制,支持一对多,一对一,多对多,多对一的交互通信。
TCP(Transmission Control Protocol):传输控制协议,面向连接,只能有两个端点,可靠交付,全双工通信,面向字节流。
二、Socket编程
(1)TCP的socket
1、Server端
class StartSocketListener implements OnClickListener{
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
new ServerTherad().start();
}
}
class ServerTherad extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
//声明一个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();
}
}
}
}
2、Client端
try {
//create a socket object ,appoint the ip and port
Socket socket =new Socket("192.168.1.2",4567);
//get the date of the file by InputStream
InputStream inputStream = new FileInputStream("f://hello.txt");
//get the outputstream from socket
OutputStream outputStream =socket.getOutputStream();
byte buffer []=new byte[4*1024];
int temp=0;
//write the date of inputstream to outputstream
while((temp=inputStream.read(buffer))!=-1){
outputStream.write(buffer, 0, temp);
}
outputStream.flush();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
(2)UDP socket
1、Server端
pubic void run() { try { //create a data gramSocket object ,appiont ip and port DatagramSocket socket= new datagramSocket(4567); byte data[] new byte[1024]; //create a null datagramPacket object datageramPacket packet = new DatagramPacket(data, data.length); socket.receive(packet); }
catch (Exception e)
{ e.printStackTrace(); } }
2、Client端
try {
//create a datagramSocket object
DatagramSocket socket= new DatagramSocket(4567);
//create a inetaddree
InetAddress serverAddress= InetAddress.getByName("192.068.1.1");
String str="hello";
byte data[] =str.getBytes();
//create a datagramPacket object and appiont the address which data to be sent
DatagramPacket packet=new DatagramPacket(data.data.length,serveraddress,4567);
//call the send function of socket
socket.send(packet);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}