socket通道小例子
来源:互联网 发布:张立演过的网络电影 编辑:程序博客网 时间:2024/03/29 18:59
用这个小例子,实现客户端提交加法数据,服务端计算结果并返回给客户端。
服务端代码
package me.zhengzx.nio;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.IntBuffer;import java.nio.channels.ServerSocketChannel;import java.nio.channels.SocketChannel;public class NIOChannelServer { private ByteBuffer buff = ByteBuffer.allocate(1024); //创建一个int缓冲区的视图,此缓冲区的内容的更改在新缓冲区中是可见的,反之亦然 private IntBuffer intBuff = buff.asIntBuffer(); private SocketChannel clientChannel = null; private ServerSocketChannel serverChannel = null; /** * 打开服务端的通道 * @throws IOException */ public void openChannel() throws IOException { //建立一个新的连接的通道 serverChannel = ServerSocketChannel.open(); //为新的通道设置访问的端口 serverChannel.socket().bind(new InetSocketAddress(8888)); System.out.println("服务端通道已经打开"); } /** * 等待客户端的请求连接 * @throws IOException */ private void waitReqConn() throws IOException { while(true) { clientChannel = serverChannel.accept(); if(null != clientChannel) { System.out.println("新的连接接入!"); } processReq(); //处理请求 clientChannel.close(); } } /** * 处理请求过来的数据 * @throws IOException */ private void processReq() throws IOException { System.out.println("开始读取和处理客户端数据. . ."); buff.clear(); clientChannel.read(buff); int result = intBuff.get(0) + intBuff.get(1); buff.flip(); buff.clear(); //修改视图,原来的缓冲区也会变化 intBuff.put(0, result); clientChannel.write(buff); System.out.println("读取和处理客户端数据完成"); } /** * 程序入口方法 */ public void start() { try { //打开服务通道 openChannel(); //监听等待客户端请求 waitReqConn(); clientChannel.close(); System.out.println("服务端处理完毕"); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { new NIOChannelServer().start(); }}
客户端代码
package me.zhengzx.nio;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.IntBuffer;import java.nio.channels.SocketChannel;public class NIOChannelClient { private SocketChannel channel = null; private ByteBuffer buff = ByteBuffer.allocate(8); private IntBuffer intBuff = buff.asIntBuffer(); //public Socket /** * 与服务器指定的地址和端口建立连接通道 * @return * @throws IOException */ private SocketChannel connect() throws IOException { return SocketChannel.open(new InetSocketAddress("localhost", 8888)); } /** * 发送加法请求到服务器 * @param a * @param b * @throws IOException */ private void sendRequest(int a, int b) throws IOException { buff.clear(); intBuff.put(0, a); intBuff.put(1, b); channel.write(buff); System.out.println("发送加法请求(" + a + "+" + b + ")"); } /** * 接收服务器的运算结果 * @throws IOException */ private int receiveResult() throws IOException { buff.clear(); channel.read(buff); return intBuff.get(0); } /** * 获得加法运算的结果 * @param a * @param b * @return */ private int getSum(int a, int b) { int result = 0; try { channel = connect(); sendRequest(a, b); result = receiveResult(); } catch (IOException e) { e.printStackTrace(); } return result; } public static void main(String[] args) { int result = new NIOChannelClient().getSum(56, 34); System.out.println("加法运算的最后结果为:" + result); }}
阅读全文
0 0
- socket通道小例子
- golang 并行 通道 小例子
- Socket小例子
- java socket小例子
- socket简单小例子
- socket简单小例子
- socket简单小例子
- socket简单小例子
- socket简单小例子
- socket简单小例子
- socket简单小例子
- linux socket 小例子
- Socket小例子
- socket 小例子
- python socket 小例子
- socket简单小例子socket简单小例子
- socket简单小例子socket简单小例子
- socket通道
- JS arguments对象
- window下利用git在码云上创建一个项目,GitHub类似
- Linux启动提示 a start job is running for
- Unity Shader-遮挡处理(X-Ray,遮挡描边,遮挡半透,遮挡溶解)
- Java NIO 通道
- socket通道小例子
- 50 WebGL透明与不透明物体共存
- Docker 在分布式和大数据框架中的应用
- overridePendingTransition函数
- 高德地图 JavaScript API 的开发流程
- C语言--冒泡法实现
- JOOQ 学习笔记一:代码自动生成
- 基于Soot的Android Apps检测
- 自定义项目中各自定义模块引用问题的解决方法