简介
Socket是Java网络编程中重要的一部分,本次我们通过使用Socket来实现一个简单的网络编程,包含客户端和服务端,客户端发送消息给服务端后,服务端返回一样的消息给客户端。类似于回音壁的效果。
效果演示
首先,分别启动客户端和服务端,此时服务端会打印端口,客户端启动后,服务端会打印客户端已连接
然后用客户端发送消息即可,发送消息后就会收到服务端的回复。。
然后切回服务端,此时也能看到打印的消息
就这么一个简单的功能,可以一起练练手。。。。
代码实现
首先实现服务端的代码:
import java.io.*; import java.net.ServerSocket; import java.net.Socket; /** * @author geekerstar * @description 服务端 */ public class Server { public static void main(String[] args) { final String QUIT = "quit"; final int DEFAULT_PORT = 8888; ServerSocket serverSocket = null; try { // 绑定监听端口 serverSocket = new ServerSocket(DEFAULT_PORT); System.out.println("启动服务器,监听端口" + DEFAULT_PORT); while (true) { // 等待客户端连接 Socket socket = serverSocket.accept(); System.out.println("客户端[" + socket.getPort() + "]已连接"); BufferedReader reader = new BufferedReader( new InputStreamReader(socket.getInputStream()) ); BufferedWriter writer = new BufferedWriter( new OutputStreamWriter(socket.getOutputStream()) ); String msg = null; while ((msg = reader.readLine()) != null) { // 读取客户端发送的消息 System.out.println("客户端[" + socket.getPort() + "]:" + msg); // 回复客户发送的消息 writer.write("服务器:" + msg + "\n"); writer.flush(); // 查看客户端是否退出 if (QUIT.equals(msg)) { System.out.println("客户端[" + socket.getPort() + "]已断开连接"); break; } } } } catch (IOException e) { e.printStackTrace(); } finally { if (serverSocket != null) { try { serverSocket.close(); System.out.println("关闭serverSocket"); } catch (IOException e) { e.printStackTrace(); } } } } }
接下来实现客户端代码
import java.io.*; import java.net.Socket; /** * @author geekerstar * @description 客户端 */ public class Client { public static void main(String[] args) { final String QUIT = "quit"; final String DEFAULT_SERVER_HOST = "127.0.0.1"; final int DEFAULT_SERVER_PORT = 8888; Socket socket = null; BufferedWriter writer = null; try { // 创建socket socket = new Socket(DEFAULT_SERVER_HOST, DEFAULT_SERVER_PORT); // 创建IO流 BufferedReader reader = new BufferedReader( new InputStreamReader(socket.getInputStream()) ); writer = new BufferedWriter( new OutputStreamWriter(socket.getOutputStream()) ); // 等待用户输入信息 BufferedReader consoleReader = new BufferedReader(new BufferedReader(new InputStreamReader(System.in))); while (true) { String input = consoleReader.readLine(); // 发送消息给服务器 writer.write(input + "\n"); writer.flush(); // 读取服务器返回的消息 String msg = reader.readLine(); System.out.println(msg); // 查看用户是否退出 if (QUIT.equals(input)) { break; } } } catch (IOException e) { e.printStackTrace(); } finally { if (writer != null) { try { writer.close(); System.out.println("关闭socket"); } catch (IOException e) { e.printStackTrace(); } } } } }
接下来,首先启动服务端,运行Main方法,然后启动客户端即可。
常见问题FAQ
- 如果资源链接失效了怎么办?
- 本站用户分享的所有资源都有自动备份机制,如果资源链接失效,请联系本站客服QQ:2580505920更新资源地址。
- 如果用户分享的资源与描述不符怎么办?
- 如何分享个人资源获取赞助积分或其他奖励?
- 如果您发现了本资源有侵权行为怎么办?