什么是Socket
通信链的句柄,用于描述IP 地址和接口。应用程序通常通过Socket 向网络发出请求或者应答网络请求。
Socket 基本通信模型
使用基于TCP 协议的Socket
【服务器】
建立Socket ,建立一个新的线程,在线程中创建一个ServerSocket 对象,设置监听指定端口号。
ServerSocket serverSocket = new ServerSocket(xxxx);
调用ServerSocket 的accept() 方法,接受客户端发送的请求,建立一个InputStream 对象,调用socket 的getInputStream() 方法获得信息流。而在线程中,accpet 方法是阻塞的方法,直到有联系之后才启动线程。
ServerSocket socket = serverSocket.accept();InputStream inputstream = socket.getInputStream();同理,可以获得outputStream。OutputStream outputSream = socket.getOutputStream();
最后调用close() 方法关闭socket。
【客户端】
建立Socket 对象,指定服务器端的IP 地址和端口号,调用getOutpuStream 方法产生outputStream 对象,从而读取数据。
Socket socket = new Socket("IP...", xxxx);InputStream inputStream = new FileInputStream("地址");OutputStream outputStream = socket.getOutputStream();
使用基于UDP 协议的Socket
【服务器】
创建一个DatagramSocket 类型对象,指定端口号。创建一个空的DatagramPacket 对象,调用receive 方法,并传入空的DatagramPacket 对象。其中,receive 方法和TCP 协议中的accept 方法一样,都是阻塞线程的方法。
DatagramSocket socket = new DatagramPacket(xxx);byte data[] = new byte[1024];DatagramPacket packet = new DatagramPacket(data, data.length);socket.receive(packet);
【客户端】
创建一个DatagramSocket 对象,指定端口,再创建地址对象,调用getByName 方法指定地址。
DatagramSocket socket = new DatagramSocket();InetAdress inetadress = InetAdress.getByName("地址");String str ="xxx";DatagramPacket packet = new DatagramPacket(data, data.length, inetadress, 端口号);Socket.send(packet);