java学习小笔记(三.socket通信)【转】
三,socket通信
1.http://blog.csdn.net/kongxx/article/details/7288896这个人写的关于socket通信不错,循序渐进式的讲解,用代码示例说明,运用流和socket进行远程通讯
2.最简单的socket是一个服务端对应一个客户端
server的写法
- ServerSocket server = new ServerSocket();
- Socket socket = server.accept();
- BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
- PrintWriter out = new PrintWriter(socket.getOutputStream());
- while (true) {
- String msg = in.readLine();
- System.out.println(msg);
- out.println("Server received " + msg);
- out.flush();
- if (msg.equals("bye")) {
- break;
- }
- }
- socket.close();
);
);
);
);
);
));
- private static void execute(ServerSocketChannel serverSocketChannel) throws IOException {
- SocketChannel socketChannel = null;
- try {
- socketChannel = serverSocketChannel.accept();
- MyRequestObject myRequestObject = receiveData(socketChannel);
- logger.log(Level.INFO, myRequestObject.toString());
- MyResponseObject myResponseObject = new MyResponseObject(
- "response for " + myRequestObject.getName(),
- "response for " + myRequestObject.getValue());
- sendData(socketChannel, myResponseObject);
- MyRequestObject myRequestObject = null;
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- ByteBuffer buffer = ByteBuffer.allocate();
- try {
- byte[] bytes;
- int size = ;
- while ((size = socketChannel.read(buffer)) >= ) {
- buffer.flip();
- bytes = new byte[size];
- buffer.get(bytes);
- baos.write(bytes);
- buffer.clear();
- }
- bytes = baos.toByteArray();
- Object obj = SerializableUtil.toObject(bytes);
- myRequestObject = (MyRequestObject)obj;
- sendData(SocketChannel socketChannel, MyResponseObject myResponseObject) throws IOException {
- byte[] bytes = SerializableUtil.toBytes(myResponseObject);
- ByteBuffer buffer = ByteBuffer.wrap(bytes);
- socketChannel.write(buffer);
client的写法
- socketChannel = SocketChannel.open();
- SocketAddress socketAddress = new InetSocketAddress("localhost", );
- socketChannel.connect(socketAddress);
- MyRequestObject myRequestObject = new MyRequestObject("request_" + idx, "request_" + idx);
- logger.log(Level.INFO, myRequestObject.toString());
- sendData(socketChannel, myRequestObject);
- MyResponseObject myResponseObject = receiveData(socketChannel);
- logger.log(Level.INFO, myResponseObject.toString());
- private void sendData(SocketChannel socketChannel, MyRequestObject myRequestObject) throws IOException {
- byte[] bytes = SerializableUtil.toBytes(myRequestObject);
- ByteBuffer buffer = ByteBuffer.wrap(bytes);
- socketChannel.write(buffer);
- socketChannel.socket().shutdownOutput();
- private MyResponseObject receiveData(SocketChannel socketChannel) throws IOException {
- MyResponseObject myResponseObject = null;
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- try {
- ByteBuffer buffer = ByteBuffer.allocateDirect();
- byte[] bytes;
- int count = ;
- while ((count = socketChannel.read(buffer)) >= ) {
- buffer.flip();
- bytes = new byte[count];
- buffer.get(bytes);
- baos.write(bytes);
- buffer.clear();
- }
- bytes = baos.toByteArray();
- Object obj = SerializableUtil.toObject(bytes);
- myResponseObject = (MyResponseObject) obj;
- socketChannel.socket().shutdownInput();
return myResponseObject;
上面的例子都需要先运行server再运行client。
java学习小笔记(三.socket通信)【转】的更多相关文章
- Java与C之间的socket通信
最近正在开发一个基于指纹的音乐检索应用,算法部分已经完成,所以尝试做一个Android App.Android与服务器通信通常采用HTTP通信方式和Socket通信方式.由于对web服务器编程了解较少 ...
- 网络协议栈学习(一)socket通信实例
网络协议栈学习(一)socket通信实例 该实例摘自<linux网络编程>(宋敬彬,孙海滨等著). 例子分为服务器端和客户端,客户端连接服务器后从标准输入读取输入的字符串,发送给服务器:服 ...
- Java并发读书笔记:线程通信之等待通知机制
目录 synchronized 与 volatile 等待/通知机制 等待 通知 面试常问的几个问题 sleep方法和wait方法的区别 关于放弃对象监视器 在并发编程中,保证线程同步,从而实现线程之 ...
- C# Socket系列三 socket通信的封包和拆包
通过系列二 我们已经实现了socket的简单通信 接下来我们测试一下,在时间应用的场景下,我们会快速且大量的传输数据的情况! class Program { static void Main(stri ...
- Java 学习札记(三)免安装版TomCat中tomcat6w.exe的运行
1.使用环境 很多时候我们用的是官网的解压免安装版的Tomcat,相比安装Tomcat除了少了安装步骤以外还少了tomcat6w.exe运行所需要的环境变量,所以一般Java开发免安装版的已经足够使用 ...
- java scoket Blocking 阻塞IO socket通信三
在NIO同步非阻塞的场景中和原来同步阻塞最大的却别就是引入了上面的Buffer对象,现在我们来学校上面的BUffer对象 我们来看看程序的代码: package bhz.nio.test; impor ...
- Java多线程编程核心技术(三)多线程通信
线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体.线程间的通信就是成为整体的必用方案之一,可以说,使线程间进行通信后,系统之间的交互性会更强大,在大大提高CPU利用率的同时 ...
- Delphi和JAVA用UTF-8编码进行Socket通信例子
最近的项目(Delphi开发),需要经常和java语言开发的系统进行数据交互(Socket通信方式),数据编码约定采用UTF-8编码. 令我无语的是:JAVA系统那边反映说,Delphi发的数据他们收 ...
- Scala学习教程笔记三之函数式编程、集合操作、模式匹配、类型参数、隐式转换、Actor、
1:Scala和Java的对比: 1.1:Scala中的函数是Java中完全没有的概念.因为Java是完全面向对象的编程语言,没有任何面向过程编程语言的特性,因此Java中的一等公民是类和对象,而且只 ...
随机推荐
- TP ajax
①Ajax使用: 注意传值的所有过程用的是小写,及时数据库列的名称中有大写字母 控制器部分: AjaxController.class.php <?php namespace Home\Co ...
- 参数Slave_IO_Running和Slave_SQL_Running的状态值解析
Slave_SQL_Running: No mysql同步故障解决方法 2010-02-21 16:31:30 标签:mysql 双机 同步 数据库 休闲 原创作品,允许转载,转载时请务必以超链接形 ...
- qt sql 模块有哪些类?
Class Description translate.google QSqlDatabase Handles a connection to a database 处理与数据库的连接 QSqlDri ...
- Django 视图系统(views)
介绍 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图 ...
- Python数据分析与挖掘所需的Pandas常用知识
Python数据分析与挖掘所需的Pandas常用知识 前言Pandas基于两种数据类型:series与dataframe.一个series是一个一维的数据类型,其中每一个元素都有一个标签.series ...
- mysql学习笔记—常用sql语句
sql注意事项: SQL 对大小写不敏感:SELECT 与 select 是相同的 某些数据库系统要求在每条 SQL 语句的末端使用分号. CREATE DATABASE CREATE DATABAS ...
- 【Zookeeper】初识zookeeper
单机模式 安装并解压: 修改配置文件,conf/zoo.cfg(配置完成后,启动后,可以通过netstat-ano命令查看是否有你配置的clientPort端口号在监听服务) tickTime: zo ...
- 剑指offer 面试61题
面试61题: 题目:LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到 ...
- Docker部署JavaWeb项目实战
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要讲了如何在Ubuntu14.04 64位系统下来创建一个运行Javaweb应用程 ...
- iOS Xcode 8 打包上架 配置文件问题 此构建版本无效 推送问题 攻克 刚刚 waiting for review
煎熬... 本来xcode 7 打包正在审核了 还要修改一处购买问题 此时 xcode已经升级到xcode 8 了 升级后 很神奇 应用没报错 很好的运行 (网上很多说xib storyboard ...