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中的一等公民是类和对象,而且只 ...
 
随机推荐
- hdu1174(3维射线与圆是否相交)
			
简单的题意,要注意z2 = h2*0.9-r2 #include <iostream> #include <cmath> #include <vector> #in ...
 - 时间格式转换 json 转 datetime js  c#
			
情景描述:使用C#在后台中传递时间到ajax中,因为是一个list<model>就直接用了Json 作为载体,但是在js中获得到的时间是var time='/Date(********** ...
 - F - 简单计算器(栈)
			
F - 简单计算器 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descripti ...
 - <2013 08 12> Andrew:C语言的一点心得
			
C语言的特点在于,这是少见的中级语言(介于机器汇编和高级语言之间),因此它极其紧密地与特定机器架构.编译器.操作系统.库等基本概念相连.在底层,人们可以少量的甚至不使用汇编,但是不能不使用C.它以一种 ...
 - 解决Raize日历控件显示的问题
			
解决Raize日历控件显示的问题 近自己的程序被测试人员发现一个小问题,就是程序中的日历选择框,显示中的“星期一.星期二....”都显示成了“星.....”,我自己看了代码,原来是raize的控件问题 ...
 - rpm命令相关命令运用实例
			
1) 挂载光盘文件到/media目录 2) 进去/media目录下的Packages目录 3) 查看系统已安装的所有rpm包 4) 查看系统是否安装dhcp软件包 5,安装dhcp软件包 6) 查看d ...
 - idea中maven 加载spring-boot项目程序包找不到解决…
			
首先检查maven配置对不对,包括被settings文件以及资源库的位置,maven版本等. 如果不行的话再进行下面的操作: 第一种方案: 在终端terminal中项目目录下,输入“mvn idea: ...
 - OpenCV3计算机视觉+python(三)
			
使用OpenCV3处理图像 下面要介绍的内容都与图像处理有关,这时需要修改图像,比如要使用具有艺术性的滤镜.外插(extrapolate)某些部分.分割.粘贴或其他需要的操作. 不同色彩空间的转换 O ...
 - 稀疏表示(Sparse Representations)
			
1.什么是稀疏表示: 用较少的基本信号的线性组合来表达大部分或者全部的原始信号. 其中,这些基本信号被称作原子,是从过完备字典中选出来的:而过完备字典则是由个数超过信号维数的原子聚集而来的.可见,任一 ...
 - 2.2  使用ARDUINO控制MC20发短信
			
需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...