`
daoger
  • 浏览: 530686 次
  • 性别: Icon_minigender_1
  • 来自: 山东济南
社区版块
存档分类
最新评论

多线程的socket对象传输(DTO)示例

阅读更多
刚温习了一下DTO,自己做的一个多线程的socket数据传输示例!

AtomsServer.java
package exam.lingling;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class AtomsServer 
{
	private int port = 8833;

	private ServerSocket serverSocket;

	private ExecutorService executorService;

	private final int POOL_SIZE = 10;

	public AtomsServer()
	{
		try
		{
			serverSocket = new ServerSocket(port);
			executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * POOL_SIZE);
			System.out.println("The server has started!");
		} catch (IOException e)
		{
			System.out.println(e.getMessage());
		}
	}

	public void serviceStart()
	{
		while (true)
		{
			Socket socket = null;
			try
			{
				socket = serverSocket.accept();
				executorService.execute(new ServerHandle(socket));

			} catch (Exception e)
			{
				e.printStackTrace();
			}
		}
	}

	public static void main(String[] args)
	{
		new AtomsServer().serviceStart();
	}
}



ServerHandle.java

package exam.lingling;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.Socket;

public class ServerHandle implements Runnable
{
	private Socket socket;

	public ServerHandle(Socket socket)
	{
		this.socket = socket;
	}

	private ObjectInputStream getAtomsReceive(Socket socket) throws IOException
	{
		return new ObjectInputStream(socket.getInputStream());
	}

	public void run()
	{
		try
		{
			ObjectInputStream ois = this.getAtomsReceive(socket);
			Object o = ois.readObject();
			while (o != null)
			{
				AtomsData atomsdata = (AtomsData) o;
				System.out.println("The version of operation is " + atomsdata.getVersion() + " .");
			}
		} catch (IOException e)
		{
			e.printStackTrace();
			System.out.println(e.getMessage());
		} catch (ClassNotFoundException e)
		{
			e.printStackTrace();
		} finally
		{
			try
			{
				if (socket != null)
					socket.close();
			} catch (Exception e)
			{
				e.printStackTrace();
			}
		}
	}
}



AtomsClient.java


package exam.lingling;

import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class AtomsClient
{
	public static void main(String args[]) throws InterruptedException
	{
		ExecutorService exec = Executors.newFixedThreadPool(2);
		for (int index = 0; index < 10; index++)
		{
			Runnable run = new Runnable()
			{
				private Socket socket = null;

				private int port = 8833;

				AtomsData atomsdata;

				ObjectOutputStream oos = null;

				public void run()
				{
					while (true)
					{
						try
						{
							socket = new Socket("localhost", port);
							atomsdata = new AtomsData();
							atomsdata.setVersion((new Double((long) (Math.random() * 1000))).toString());
							oos = new ObjectOutputStream(socket.getOutputStream());
							oos.writeObject(atomsdata);
						} catch (IOException e)
						{
							e.printStackTrace();
						} finally
						{
							try
							{
								oos.close();
							} catch (Exception e)
							{
								e.printStackTrace();
							}
						}
					}
				}
			};
			exec.execute(run);
		}
		exec.shutdown();
	}
}



AtomsData.java

package exam.lingling;

import java.io.Serializable;

public class AtomsData implements Serializable
{
	private static final long serialVersionUID = 1L;

	private String version;

	private int[] atomsArray;

	AtomsData()
	{
	}

	AtomsData(String version, int[] atomsArray)
	{
		this.version = version;
		this.atomsArray = atomsArray;
	}

	public int[] getAtomsArray()
	{
		return atomsArray;
	}

	public void setAtomsArray(int[] atomsArray)
	{
		this.atomsArray = atomsArray;
	}

	public String getVersion()
	{
		return version;
	}

	public void setVersion(String version)
	{
		this.version = version;
	}

	public String toString()
	{
		return "AtomsData info:" + this.version;
	}
}

分享到:
评论

相关推荐

    视图对象(VO、DTO)的应用!

    在软件开发中,视图对象(View Object,简称VO)和数据传输对象(Data Transfer Object,简称DTO)是两种常见的设计模式,它们在系统架构中起着至关重要的作用。这两种对象主要用于解决数据模型与界面展示之间的数据...

    DTO数据传输对象简介PPT

    DTO数据传输对象简介PPT

    扩展MyBatisPlus代码生成器实现自定义源码生成,可生成前端页面、vo对象、dto对象等代码

    然而,对于VO对象、DTO对象以及前端Vue页面等非预置的代码生成需求,就需要我们对默认的代码生成器进行扩展和定制。 在MyBatisPlus 3.5.3版本中,代码生成器主要有两种类:`AutoGenerator`和`FastAutoGenerator`。`...

    【Java 设计模式-源码】数据传输对象模式:简化子系统间的数据交换

    数据传输对象(DTO)模式...由于每个调用的大部分成本与客户端和服务器之间的往返时间相关,减少调用次数的一种方法是使用一个对象(DTO),该对象聚合了原本需要通过多次调用传输的数据,但仅通过一次调用提供服务。

    java术语(PO/POJO/VO/BO/DAO/DTO)

    DTO可能会包含多个VO对象的组合,以适应更复杂的传输需求。 这六种对象在实际项目开发中起到不同的作用,理解并正确使用它们可以帮助我们构建更加清晰、模块化的软件架构。例如,PO和DAO一起用于数据持久化,BO处理...

    java 使用 JAXB 将xml转换为 bean 包含xml和dto和读取文件的util类

    在给定的压缩包文件中,可能包含了实现这一功能的相关代码示例,包括XML文件、数据传输对象(DTO,Data Transfer Object)以及一个用于读取文件的工具类。 首先,我们需要了解JAXB的基本工作原理。JAXB提供了一种...

    导入Excel快速生成DTO

    在IT行业中,尤其是在Java开发领域,数据传输对象(DTO,Data Transfer Object)是一种常见的设计模式,用于在系统组件之间传递数据。"导入Excel快速生成DTO"这个标题暗示了一个工具或库,它能帮助开发者从Excel文件...

    登陆的dto.zip

    DTO,全称Data Transfer Object,是软件设计模式中的一种,主要用在分布式系统或Web服务之间,用于数据的传输。DTO对象通常不包含任何业务逻辑,仅仅是数据的载体,使得不同层之间的数据交换变得简单。在这个"登陆的...

    DTO设计模式.docx

    这样做的好处在于,当数据需要跨层传输时,可以避免直接传递复杂的业务对象,防止了不同层之间的相互污染,同时也可以提高性能,因为在传输过程中只传输必要的数据,而不是整个对象。 在上述实例中,我们有一个...

    分页dto把html写在dto里

    标题“分页dto把html写在dto里”和描述“把分页按钮写在dto里,其他dto继承他”表明了一个特殊的实践,即将HTML代码直接包含在DTO对象中,以便于处理分页功能,并且其他DTO可能通过继承这个特殊的DTO来共享相同的...

    dto:JSON数据传输对象库和助手

    DTO(数据传输对象) 概述 创建该库是为了解决以下问题:从数据源获取数据模型,并且需要删除,添加,合并或转换数据模型为相似或完全不同的对象。 其他语言也有类似的库(DataMapper,DTO(C#)等)。 我永远找不...

    java DTO 详解

    在分布式系统的设计中,DTO(Data Transfer Object,数据传输对象)是一种非常重要的概念和技术手段。当客户端需要与服务器端进行交互时,尤其是在涉及大量的数据交换场景下,传统的做法可能会带来一系列的问题。...

    快速生成DTO

    在软件开发过程中,数据传输对象(Data Transfer Object, DTO)是一种常见的设计模式,用于在系统之间传递大量数据。DTO不包含任何业务逻辑,主要是数据容器。在这个场景中,"快速生成DTO"指的是利用Excel模板来自动...

    Python库 | lol_dto-0.1a10.tar.gz

    这个库的名称可能暗示了它与电子竞技游戏《英雄联盟》(League of Legends,简称LoL)的数据传输对象(Data Transfer Object, DTO)处理有关,DTO是软件设计模式中的一种,用于在系统不同层之间传递数据。...

    Any2Dto插件,可以根据数据库和JavaCode生成强类型且精确字段的DTO

    在IT行业中,开发人员经常需要处理数据传输对象(DTO)的创建,这通常是将数据库模型转化为业务层或视图层所需的格式。手动编写这些DTO类可能会导致大量的重复代码,增加维护成本,同时也容易引入错误。为了解决这个...

    feignclient发送get请求使用dto接收参数demo

    在“demo-workspace”文件夹中,可能包含了一个完整的项目结构,包括了配置文件、接口定义、DTO类、主启动类等,你可以进一步探索和学习这个示例。理解并掌握这一技术,将有助于构建高效、可维护的微服务架构。

    beanknife:注释处理器库可自动生成数据传输对象(DTO)

    注释处理器库可自动生成数据传输对象(DTO)。 文件 弹簧支撑 可序列化的支持 快速浏览 根据 class Pojo1 { private int a; private List&lt; Pojo2&gt; pojo2List; } class Pojo2 { private String b; private Pojo1...

    eclipse插件,根据数据库表自动生成DTO(pojo)插件

    在Java开发中,数据传输对象(DTO)和持久化对象(POJO)是常见的概念,它们用于在不同层之间传递数据。手动创建这些类可能会耗费大量时间,特别是在处理大量数据库表时。因此,"eclipse插件,根据数据库表自动生成...

    Dto转实体类 AutoMapper

    在软件开发中,数据传输对象(Dto,Data Transfer Object)和实体类(Entity Class)是两种常见的对象模型,它们在不同的场景中各自扮演着重要的角色。Dto主要用于在系统组件之间传递数据,而实体类通常代表数据库中...

    Java利用Freemarker模板自动生成dto、dao、rowmapper、bo、service代码

    生成RowMapper代码时,通常会为每个DTO创建一个对应的RowMapper实现,这样可以在处理数据库查询结果时,方便地将结果集转换为DTO对象。 5. **BO(Business Object)**: BO是业务逻辑层的对象,负责处理业务规则和...

Global site tag (gtag.js) - Google Analytics