标签:pack this 有一个 学习过程 网络开发 代码 理解 自己 简单
对学习过程中自己敲的一些关于socket有关的代码做了个简单总结,在这分享一下,给有需要的同学借鉴一下。
什么是socket?
首先我们先来完成socket服务端的代码开发。
在服务端的main方法里,我们将socketserver对象设置成持久的,并绑定于本机的8899端口上,去接收客户端的socket连接。
package com.wenbing.socket; import java.net.InetSocketAddress; import java.net.Proxy; import java.net.ServerSocket; import java.net.Socket; public class ServiceServer { public static void main(String[] args) throws Exception{ // 创建一个serversocket,绑定到本机的8899端口上 ServerSocket server = new ServerSocket(); server.bind(new InetSocketAddress("localhost", 8899)); // 接收客户端的连接;accept是一个阻塞方法,会一直等待,到有客户端请求连接才返回 while (true) { Socket socket = server.accept(); // 每个socket请求都给一个线程来处理 new Thread(new ServiceServerTask(socket)).start(); } } }
package com.wenbing.socket; import java.io.*; import java.net.Socket; public class ServiceServerTask implements Runnable { Socket socket; InputStream inputStream = null; OutputStream outputStream = null; public ServiceServerTask(Socket socket) { this.socket = socket; } // 业务逻辑,跟客户端进行数据交互 @Override public void run() { try { // 从socket连接中获取到与client之间的网络通信输入流 inputStream = socket.getInputStream(); // 从socket连接中获取到与client之间的网络通信输出流 outputStream = socket.getOutputStream(); // BufferedReader读取数据是一个字符一个字符读取,遇到回车即停止 BufferedReader br = new BufferedReader(new InputStreamReader(inputStream)); // 从网络通信输入流中读取客户端发送过来的数据,读取一行,遇到回车即结束 // 注意:socketinputstream的读数据的方法是阻塞的 //读取很多行数据,用while循环读 // String line = ""; // String param = ""; // while (( line = br.readLine()) != null) { // param = br.readLine(); // System.out.println(param); // } String param = br.readLine(); System.out.println(param); GetDataServiceImpl getDataService = new GetDataServiceImpl(); String result = getDataService.getData(param); // 将调用结果写到socket的输出流中,以发送给客户端 PrintWriter printWriter = new PrintWriter(outputStream); printWriter.println(result); printWriter.flush(); } catch (IOException e) { e.printStackTrace(); } finally { try { // 关流,现在是在每个线程里 inputStream.close(); outputStream.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } } }
处理数据的方法。
package com.wenbing.socket; public class GetDataServiceImpl { public String getData(String param) { return "OK-" + param; } }
接下来就是socket客户端了。客户端和服务端代码基本相同。
package com.wenbing.socket; import java.io.*; import java.net.Socket; public class ServiceClient { public static void main(String[] args) throws Exception { // 向服务器发出请求建立连接 Socket socket = new Socket("localhost", 8899); // 从socket中获取输出流 InputStream inputStream = socket.getInputStream(); OutputStream outputStream = socket.getOutputStream(); PrintWriter printWriter = new PrintWriter(outputStream); printWriter.println("hello"); printWriter.flush(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); String result = bufferedReader.readLine(); System.out.println(result); inputStream.close(); outputStream.close(); socket.close(); } }
简单的socket小例子,送给java小白们。
纸上得来终觉浅,绝知此事要躬行,一定要跟着敲一敲才更容易理解哦。
标签:pack this 有一个 学习过程 网络开发 代码 理解 自己 简单
原文地址:https://www.cnblogs.com/wenbinshen/p/9893380.html