socket的简单例子:
场景:在本地模拟客户端和服务端通过socket,进行简单的连接,客户端发送请求到服务端,而服务端也可以接受请求后,返回信息给客户端。
解析:
1:客户端通过socket,向某一服务端(ip),的应用(端口号),进行连接。
2:服务端会对该应用进行监听,并处于一个阻塞的状态,等待着请求的访问。
3:若两者接通后就可以通过流的方式进行数据信息的交互。
代码:新建两个简单的测试的类(分别代表客户端和服务端)
package com.lj; import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; public class SimpleClient { public static void main(String[] args) { try { //连接某个机器的服务端的应用 Socket socket = new Socket("127.0.0.1",8888); //接通客户端后,就可以与之进行交流,java.io //发送消息到服务端 对自身而言是输出 DataOutputStream output = new DataOutputStream(socket.getOutputStream()); output.writeUTF("[来自client的消息]:hello 你好"); System.out.println("客户端发送完毕!"); } catch (IOException e) { e.printStackTrace(); } } }
import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class SimpleServer { public static void main(String[] args) { try { //服务端需要监听一个应用 ServerSocket serverSocket = new ServerSocket(8888); //监听的应用处于阻塞的状态 Socket socket = serverSocket.accept(); System.out.println("连接正常!"); //接通客户端后,就可以与之进行交流,java.io //发送消息到服务端 对自身而言是输入 DataInputStream input = new DataInputStream(socket.getInputStream()); String context = input.readUTF(); System.out.println(context); System.out.println("服务端就收完毕!"); } catch (IOException e) { e.printStackTrace(); } } }
测试:
先执行服务端,对端口为8888的应用进行监听,控制台不会输出,因为正处于阻塞的状态等待着请求访问接通。
再执行客户端,向服务端进行请求,这是若是能正常连接,则可以,正常跑连接后的逻辑,交互也可以使用文件流的所有技术。