本篇主要以实例为主介绍socket编程
Socket:基于TCP/IP协议的网络编程机制,分为服务端和客户端。
-
服务端
ServerSocket类,侦听本机的端口
-
创建
ServerSocket(int port) port参数为端口号
-
主要方法
方法 说明 accept() serverSocket.accept();接收客户端的Socket,会阻塞线程直到有客户端连接 close() 关闭侦听
-
-
客户端
Socket类,客户端向服务端发送连接,进行网络通知
-
创建
Socket(String ip,int port) 通过ip和端口连接服务端
-
方法
方法 说明 disconnect() 关闭 OutputStream getOutputStream() 获得输出流 InputStream getInputStream() 获得输入流 注:IO流关闭后,socket会自动关闭
-
我们可以根据下面的图来设计一个数据传输模型:
/** *服务端 */ public class Server { public static final int PORT = 6666; public void start() { System.out.println("服务器启动了!"); //创建服务端Socket try(ServerSocket serverSocket = new ServerSocket(PORT)){ //接收客户端连接 while(true) { Socket socket = serverSocket.accept(); System.out.println("客户端连接了!" + socket.getInetAddress()); //获得输入流,得到客户端发送的消息 ObjectInputStream in = new ObjectInputStream(socket.getInputStream()); String str = in.readUTF(); System.out.println("接收消息:" + str); //获得输出流 ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream()); out.writeUTF("服务器收到了您的消息,并向您回复了一句嘿嘿"); out.flush(); } } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { new Server().start(); } } /** *客户端 */ public class Client { /** * 发送消息 */ public void send(String ip,int port,String msg){ //创建连接 try(Socket socket = new Socket(ip,port)){ //获得输出流 ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream()); out.writeUTF(msg); out.flush(); //获得输入流 ObjectInputStream in = new ObjectInputStream(socket.getInputStream()); String s = in.readUTF(); System.out.println("服务器:" + s); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { new Client().send("192.168.x.xxx",6666,"你好"); } }