自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(391)
  • 资源 (10)
  • 收藏
  • 关注

原创 高性能设计要点

Disruptor底层采用RingBuffer的结构,就是一个循环使用下标的数组;使用内存代替DB事务操作(写内存+预写日志WAL(LSM树))网络线程模型1+N+M(监听线程+IO线程+业务线程)数据异构(宽表、搜索引擎、转换为时候高并发读的结构)读写分离(Master/Slave、一主多从)并发请求串行化(请求排队)+ 单进程单线程。分治法(多机房、多实例、数据分片)多级缓存(本地缓存+分布式缓存)热点内容(评论、帖子)本地缓存。Feed流表按照时间分区。无锁架构,减少资源竞争。异步(消息、多线程)..

2022-08-28 09:32:46 566 1

原创 关于业务中台建设的思考

中台的误区这周参与了公司有关中台的方案讨论,发现与我中心的中台概念相差甚远。中台的特点是提供企业级复用能力,目的提高企业生产力。目前很多团队开始建设中台,但是中台建设陷入了很多误区:CRUD的中台。只有数据沉淀,没有中台能力。无业务的中台。中台不注重业务沉淀,所谓的不care业务。典型案例:这种业务逻辑我们中台不负责,你们上层处理就好了。无扩展能力的中台。硬编码,设计僵化,响应需求变化困难。这里简单说一下中台化思路中台化思路建设思路业务模型统一,数据逻辑隔离多租户元数据业务能力沉

2021-01-14 15:52:43 633

原创 思考复杂的系统

2020-02-05 09:41:29 362

原创 系统思维

系统与涌现系统系统 = 实体 + 关系 + 功能系统是由一组实体和这些实体之间的关系所构成的集合,其功能要大于这些实体各自功能之和。架构定义为“对系统中的实体及实体之间的关系所进行的抽象描述”涌现实体之间的交互会导致涌现物。涌现指的是系统在在运作时所表现,呈现或者浮现的东西。涌现 = 功能 + 性能 + 意外 + …系统思维的任务确定系统的形式与功能系统同时具备形式...

2020-01-31 10:43:40 271

原创 软件中组件拆合原则

三个拆合的指导原则:REP(复用/发布等同原则),CCP(共同闭包原则)和CRP(共同复用原则)。组件聚合原则张力图REP(复用/发布等同原则):软件复用的最小粒度应该等同于其发布的最小粒度(注:只有那些通过版本追踪系统发布的组件才能被高效地复用)CCP(共同闭包原则):将同时修改,目的相同的类放到同一个组件;不会同时修改,目的不同的类放到不同的组件CRP(共同复用原则):不要强迫一个...

2020-01-17 15:39:48 744

原创 浅谈软件设计原则

通用原则OCP(开闭原则)架构设计的主导原则。设计良好的软件应该易于扩展,同时抗拒修改。这是我们进行架构设计的主导原则,其他的原则都为这条原则服务。USB接口满足OCP原则,各个厂商可以扩展接口实现,但是不能修改接口定义正交性设计“正交性”是从几何学中借来的术语。如果两条直线相交成直角,它们就是正交的,比如图中的坐标轴。用向量术语说,这两条直线互不依赖。沿着某一条直线移动,你投影到...

2020-01-17 11:53:04 446

原创 关于中台化一些思考

有个同事问了我一个架构问题,大概是这样的:组装某业务的VO的对象逻辑放到哪层,感觉放到service层好像不太合适。我感觉问的非常好,这种问题非常典型,值得分享一下。目前来说,我们在前台层(Controller)直接调用一个下层大的service,一杠子捅到底,各种领域层的逻辑都放到这个service里面。造成各种领域层依赖耦合严重,领域层的服务不好重用。这里有必要抽象出中间一层,它可能是中台层,...

2019-12-22 21:56:27 1948

原创 写好设计文档

写好设计文档怎样算一个好的设计文档文档意图清晰,描述逻辑有序动静结合,既有静态模型又有动态模型注重分析生产活动的生命周期列出能力矩阵善于发现概念,将捕捉到的概念显示化,建立领域模型划清边界,构建层次有不同的视图,一图胜千言。比如有用例图,领域模型图,活动图,时序图,状态图,业务流程图,业务架构图,应用架构图,技术架构图等等。静态建模用例收集用例是设计文档后续所有环节的输入...

2019-12-22 20:40:15 253 1

原创 系统中台能力思考和探索

系统中台能力思考和探索中台思想中台特点数据模型统一;业务隔离;可扩展:引擎化,参数化,配置化,流程化可视化:能力地图,业务全景图;由1到4,实现越来遇难,其中3是实现关键。中台实现...

2019-09-08 19:49:07 384

原创 Elasticsearch源码编译

下载源码https://github.com/elastic/elasticsearch, github下载源码,分支切换到5.5,用ieda打开,等待漫长的编译过程下载安装包直接编译的源码不能直接使用,需要依赖安装包一些插件等,下载5.5.3安装包,下载地址 https://www.elastic.co/downloads/past-releases , 解压放到/opt/search/e...

2018-09-19 17:22:44 1012

原创 可供参考的互联网电商订单中心设计

最近在做订单中心领域模型设计,虽然还不完善,这里分享出来,希望能给大家提供一个思路。有不懂的,请多多交流,谢谢啦!

2018-06-09 09:56:33 7152

原创 分布式事务一些思考和总结

最近在做交易订单的事情,随着系统越来越复杂,交易量越来越大,出现不一致的情况也频发。不禁引人思考,这里做一些总结记录。分布式事务有一些理论,最常听的是CAP,ACID等。这里就不做介绍了,大家自己去查资料看看。分布式事务也经常提到2PC,3PC,因为不太适用互联网场景,这里也不做介绍。下面我们来看看一个电商典型的场景,下单后发送消息给其他业务系统,很多同学喜欢这样做 @Trans...

2018-03-23 10:56:19 511

原创 mybatis线上问题查找

线上反映查不到数据,根据业务逻辑把sql找出来执行,实际是有数据的。不知道什么原因,记录一下查找问题过程。greys查找问题 greys对查找线上问题还是挺有帮助的,地址https://github.com/oldmanpushcart/greys-anatomy进入greys首先通过jps查到Java进程ID sudo jps -l 切换到jetty账号,执行greys脚本进入 s

2017-10-30 20:56:00 589

原创 RocketMQ有序消息研究

在订阅消息的时候,有时我们希望消息能按照一定业务顺序消费,比如一个订单创建,订单修改,订单完成。这时候是需要顺序消息。RocketMQ支持顺序消费,下面来研究一下实现逻辑。样例生产者public class OrderedProducer { public static void main(String[] args) throws Exception { //Instant

2017-10-28 19:19:41 3993

原创 一次JVM调优实战

早上查看低峰期gc情况,发现昨晚上fgc有274次,感觉有些不正常,开始查找原因[jump@order-binlog-data002 spring-boot]$ sudo jstat -gc 20028 4000 10 S0C S1C S0U S1U EC EU OC OU MC MU CCSC C

2017-07-17 19:15:32 1643

原创 ThreadPoolExecutor源码剖析的一些思考和总结

最近迁移一个项目,涉及到线程池的问题。特意看了一下ThreadPoolExecutor源码,记录一下。思考几个问题ThreadPoolExecutor的基本实现思路是什么? - 在线程池正在运行(running)的状态下,提交任务到线程池以后,如果线程数量小于corePoolSiez,则创建新的工作线程加入workers中,并启动该线程;如果大于等于corePoolSiez,则加入任务队列中,等待

2017-06-05 17:54:33 885

原创 从dubbo看Netty使用

Netty是个高性能的Java网络传输框架,在很多中间件或者分布式框架中几乎都能看到它的身影。既然Netty这么受欢迎,那到底怎么把netty嵌入到我们的系统中了?笔者在几年前就接触了Netty,也开发了个小项目。一直问题困扰自己,Netty使用场景是什么?怎么使用Netty?我们可以从dubbo中找到些答案。dubbo是高性能轻量级的RPC框架。netty本质的功能负责网络传输,dubbo使用ne

2017-05-11 09:32:37 22642 3

原创 关于分库分表的实现

当数据大的时候,都会考虑分库分表的实现。分库分表可以在不同的层做。一般来说有以下几种:jdbc层:实现复杂,属于轻量级,对应用基本没有侵入性;缺点是不能复用数据库连接,在应用部署多的时候资源耗费大,不适于大规模部署。类似当当网的sharding-jdbc.ORM层:比如蘑菇街TSharding框架封装mybatis,实现简单。缺点是必须依赖ORM层,侵入性比较大。DBProxy层:如cobar

2017-03-10 15:14:16 3792

原创 Java中sleep和wait有什么区别?

sleep和wait有什么区别?大家都说是sleep不会释放锁,wait会释放锁。一直都不是很理解。最近在看AQS代码,才找到一些蛛丝马迹。AQS的await和wait实现思想类似,释放当前占有的锁,让其他线程继续获取锁。等适合机会唤醒后再重新占有锁。await方法有fullyRelease的方法 1.先将线程插入等待队列; 2.释放当前的占有的资源,即释放锁; 3.让当前线程停止,等待唤醒;

2017-03-05 16:08:41 1130

原创 从ReentrantLock去分析AbstractQueuedSynchronizer

在并发中,锁是一个重要的工具,能帮助程序处理好数据并发处理不一致的问题,而AbstractQueuedSynchronizer在其中扮演中重要的角色。在设计所锁的时候,应该思考怎么锁能解决什么问题,而这个问题本质是由于什么原因引起。并发问题说到底是由于资源共享竞争使用引起的。锁就是为了防止资源不合理竞争使用导致的并发问题。AQS简介AbstractQueuedSynchronizer简称AQS,是J

2017-03-04 18:06:06 530

原创 Spring中@Transactional什么时候开启事务?

在使用注解事务的情况时,Spring会把每个方法的执行封装为AOP执行过程。每次执行被事务注解方法时,会判断是否有必要创建事务。如果创建事务成功,则继续调用业务逻辑方法。事务是在方法执行最开始阶段创建的,因此方法要越小越好。事务的执行入口是TransactionInterceptor的invoke方法 @Override public Object invoke(final Metho

2017-03-01 21:45:39 13008

原创 JVM的Perm区持续增长导致OOM问题记录

查找问题先用jstack看看线程栈是否正常,确认正常后用jmap查看(因为线上用的OpenJDK,需要安装debuginfo包)堆中快照情况。jmap一些命令可能会造成JAVA进程挂起,特别是jmap -permstat会造成STW,程序无法响应。建议使用jmap命令应该与线上环境隔离才能用。使用jmap -permstat发现大量dead状态的class对象,其中class为groovy/lang

2017-02-05 17:33:48 4013 3

原创 这些年读过有关计算机的书

快过年了,正在整理买的书,发现一大堆,还有些成就感,故总结记录一下。Java后端Java编程思想这本书是大学的教科书,买的是盗版的,现在工作了,就买了本正版的。总的来说,这本书在Java领域名气大,但我读起来有些费劲,一个是排版的问题,一个是作者的文笔的问题。作者用了很多源码例子讲述Java语法,并没有归纳总结,读起来真累。怪不得当初在大学的时候有些排斥Java,也有这本书的原因。Java核心技术该

2017-01-23 20:56:57 788

原创 Spring AOP自定义实现

上一遍文章研究了Spring AOP实现源码,现在自己也想自己实现。假如要对以下接口BarService织入Before增强和After增强接口定义public interface BarService { void doSomething();}接口实现@Servicepublic class BarServiceImp implements BarService { @Ove

2017-01-02 10:44:07 2324

原创 Spring AOP源码研究笔记

实现思路通过BeanPostProcessor的postProcessAfterInitialization方法,对初始化后的Bean创建代理。InstantiationModelAwarePointcutAdvisorImpl是Advisor的默认封装。MethodBeforeAdviceInterceptor是Before的默认实现。关键源码解析AbstractAutoProxyCreator类

2016-12-31 16:28:44 1118

原创 AOP的实现的几种方式

静态AOP 在编译期,切面直接以字节 码的形式编译到目标字节 码文件中。AspectJ属于静态AOP,是在编译时进行增强,会在编译的时候将AOP逻辑织入到代码中,需要专有的编译器和织入器。优点:被织入的类性能不受影响。缺点:不够灵活动态AOPJDK动态代理 在运行期,目标类加载后,为接口动态生成代理类,将切面植入到代理类中。Java从1.3引入动态代理。实现原理是为被代理的业务接口

2016-12-04 16:57:33 13788

原创 初识Spring Batch

概念Spring Batch是一个优秀的离线批处理框架。可以批量处理的数据格式可以是文本文件、xml文件以及持久化的数据。当然Spring Batch还提供了丰富的接口可以扩展,处理不同格式的数据。处理规模为中小型(对于海量的数据可以考虑Hadoop)。使用场景可以考虑账单对账,数据迁移,定时批量更新数据等等。 层次架构如上图。分三层:应用层,核心层,基础设施层。应用层包括所有的batch作业和

2016-12-02 11:52:19 783

原创 Spring中Bean的生成过程

Spring是个Bean大工厂,负责Bean的创建和注入。核心接口BeanFactory是Spring最核心接口,它是Bean的容器,所有Bean的创建和注入几乎都与它有关。很多后缀是“Context”的类都继承或扩展了它,比如ClassPathXmlApplicationContext。最核心的方法是getBean,当然getBean有很多种重载形式,这里不一一列出。public interfac

2016-11-02 15:31:00 8837 3

原创 关于ThreadLocal内存泄漏引起的思考

概述最近在对一个项目进行重构,用到了ThreadLocal。场景如下:外围系统会调用接口上传数据,在接口中要记录数据的变化Id,在上传数据完后需要集中在一个地方把这些Id以消息形式发送出去。使用场景样例代码 public Result<Void> uploadOrder(TotalPayInfoVo totalPayInfoVo) { try { sav

2016-11-01 19:59:17 3707

原创 MapperScannerConfigurer在mybatis-spring的妙用

概述在mybatis中我们经常这样定义OrderInfoMapper这样的接口,然后配置OrderInfoMapper.xml映射到OrderInfoMapper,就可以直接注入OrderInfoMapperpublic interface OrderInfoMapper { int insert(Order order);}定义一个SQL操作<insert id="insert" param

2016-09-14 17:40:41 12288

原创 Spring事务源码分析

事务属性定义接口TransactionDefinition是事务属性定义接口,保存事务定义的各种属性,如超时时间、隔离级别、传播属性等。public interface TransactionDefinition { //获取事务传播类型 int getPropagationBehavior(); //获取事务隔离级别 int getIsolationLevel();

2016-09-13 21:58:28 1224 1

原创 Redis统计某个时间段订单数量(用Guava缓存辅助解决)

简介公司有这么个需求,需用统计店铺某个时间段(按自然天计算,不超过24小时)类的订单数量。因为这些统计数据不用持久化,考虑到性能问题,准备用Redis做统计。 - 设计思路:用Reids的一个有序集合实现。店铺Id作为有序集合key,订单ID作为有序集合member,插入到Redis时间戳作为有序集合的score。增加的时候用zadd(cacheKey, System.currentTimeMil

2016-08-31 15:07:19 7660 2

原创 Redis在集群环境中生成唯一ID

概述设计目标:每秒最大生成10万个ID,ID单调递增且唯一。Reidis可以不需要持久化ID。 要求:集群时钟不能倒退。 总体思路:集群中每个节点预生成生成ID;然后与redis的已经存在的ID做比较。如果大于,则取节点生成的ID;小于的话,取Redis中最大ID自增。Java代码import org.apache.commons.lang3.RandomStringUtils;import

2016-08-28 21:38:22 23990 3

原创 面向对象设计原则

最近在重构老系统的代码,感觉有些疑惑,故重新看了《敏捷开发软件开发:原则、模式和实践》,记录一下。 面向对象设计要遵守下面几个原则:类单一职责原则(SPR)每个类承担的职责应该单一,实现高内聚。如果这个类承担太多,那么它变动的可能性很大,因为有太多原因导致这个类变化。就一个类而言,应该仅有一个引起它变化的原因。任何在设计类的时候,都需要考虑到这个类的职责,即这个类的边界。这提示我们,在设计系统或者

2016-08-21 07:52:40 503

原创 聊聊JVM常用参数设置

整体考虑堆大小-Xms3550m, 初始化堆大小。通常情况和-Xmx大小设置一样,避免虚拟机频繁自动计算后调整堆大小。 -Xmx3550m,最大堆大小。考虑分代设置堆大小首先通过jstat等工具查看应用程序正常情况下需要堆大小,再根据实际情况设置。新生代-xmn2g,新生代大小。Sun官方推荐配置为整个堆的3/8。 -XX:SurvivorRatio=8。Eden和Survivor的比值。老年代

2016-07-30 10:46:28 6483

转载 Mac OSX 10.10 Yosemite编译OpenJDK 8

编译时间:2016-04-03系统版本:Mac OS X Yosemite 10.10.2编译OpenJDK版本:JDK8相关软件版本:            •          XCode版本:Version 5.1.1 (5B1008)            •          JDK版本:1.8.0_51            •          软件管理工具:

2016-07-27 15:59:21 3401

转载 Mac编译OpenJDK7(8)和Eclipse调试Hotspot

一、前言Java是我主要的生产语言,但对JVM不是很了解,最近也在看《深入理解Java虚拟机 第二版》,所以想亲手编译OpenJDK和调试HotSpot虚拟机系统是15年的Mac OS X(10.11.5),而OpenJDK7却是13的,完全按照书本来,肯定是编译不过的,本文记录了在这个痛苦过程中遇到的坑,希望对其他人能有所帮助OpenJDK8使用configure && make

2016-07-27 14:50:03 3558 3

原创 dubbo间歇性超时问题解决

之前dubbo每隔十分钟左右会出现以下超时情况Caused by: com.alibaba.dubbo.remoting.TimeoutException: Waiting server-side response timeout by scan timer. start time: 2016-07-20 16:27:34.873, end time: 2016-07-20 16:27:39.895

2016-07-21 17:00:53 29292 6

原创 SOA研究-用zookeeper实现服务的注册和发现

注册中心一般具有以下功能:注册服务订阅服务失败重新注册和订阅本地缓存服务信息列表大体过程如下:1.服务提供者暴露服务后向注册中心注册,如果多个注册中心的话,需要分别注册到多个注册中心;注册信息包含自己主机名,端口号,服务名,其他额外参数等。本地一般用map缓存已经注册的服务,当然也可以用文件保存到本地,当网络抖动等原因重新恢复连接Zookeeper的时候,需要从缓存取出来重新注册。2.

2016-07-18 19:47:11 6018 1

原创 SOA如何设计传输模块(二)-Netty的实现

上一遍介绍了设计传输模时接口的定义(http://blog.csdn.net/csujiangyu/article/details/51761479)这里用了主流的框架netty来实现。首先设计NettyServer,主要功能是绑定端口,监听连接。public class NettyServer extends AbstractServer { private ServerBootstrap

2016-06-26 10:06:42 1137

OS 操作系统 进程 线程 文件 设备 C# 多用户 登陆 课程设计 报告 算法 FCFS

本系统由用C#语言进行编写和实现,可实现多用户登录。各模块简介如下: 1 文件部分分为C盘和D盘两个磁盘块,在每个磁盘块中均可进行新建、删除、编辑、格式化、显示 属性及个文件等操作。如可新建文件夹、文本文件和可执行文件,并可对新建的文件进行编辑。 此次课程设计中文件系统采用显示链接FAT表。磁盘是断电后内容不丢失的,因此用文件模拟磁盘。要求模拟系统存在两块硬盘:每个磁盘分成128块,每块64字节,第0,1块存放FAT表,第2块存放初始盘快。 文件的逻辑结构采用流式结构; 文件的内容: 文件的内容均采用文本文件,系统中有两种文件: 一种是存放任意字符的文件 一种是可执行文件:可执行文件的内容就是系统内进程的程序体。 文件中要有一种特定命令的“可执行”文件,文件中的命令非常简单,仅仅包括以下几种指令: i=?; 给i赋值一位数 i++; i加1 i--; i减1 !??; end; 第一个?为A,B,C中某个设备,第二个?为一位数,表示使用设备的时间(由于没有 实际设备,所以无法知道设备何时工作完成,所以假定一个数,这个数随着系统时间 增加而递减,减到0时,认为是设备工作完成); end. 表示文件结束,同时将结果写入文件out,其中包括文件路径名和i的值。 用户接口 用户接口提供用户命令接口,要求文件名中既可以支持相对路径的文件名,也可支持绝对路径的路径 名。要求实现以下命令: 创建文件:create 盘符:\文件名(目录名).e(t). 建立新文件,如果原来存在同名文件要提示是否覆盖。 拷贝文件:copy 盘符:\文件名(目录名).e(t). to 盘符: 拷贝文件可同名拷贝,也可更名拷贝 删除文件:delete盘符:\ 文件名(目录名).t(e). 注意:磁盘内和磁盘间文件移动的不同,磁盘内的移动实际只是目录的改变,并不需要真的移动文件 ;磁盘间的文件移动实际上是先拷贝文件到目标磁盘,然后再删除源文件。 2 进程部分 进程管理主要包括进程调度,进程的创建和撤销、进程的阻塞和唤醒,中断作用的实现。 硬件工作的模拟: 中央处理器的模拟 用函数CPU( )(该函数不能有参数)模拟中央处理器。 该函数主要负责解释“可执行文件”中的命令。 i=?; 给i赋值一位数 i++; i加1 i--; i减1 !??; end; 在模拟系统界面上,我们显示了: 就绪队列----进程名称、优先级; 阻塞队列----进程名称、优先级、阻塞原因; 正在运行的进程,该进程的优先级,以及正在运行的指令,中间结果,执行结果; 系统内存的占用情况,剩余空间等,以便显示的提示用户执行新的进程。 注意:CPU只能解释指令寄存器IR中的指令。一个进程的运行时要根据进程执行的位置,将对应的指令 存放到指令寄存器中。 3 存储部分 存储管理部分主要实现主存空 间的分配和回收、存储保护。 模拟系统中,采用页是存储管理方案(PCB区域单独存放) 系统区包括pcb区域 用数组模拟其他内存区域,大小为512字节。 主存分配策略 当有程序要存放入主存时,查看空闲块总数是否够用,如果够用,先分配一块用来存放页表,然后查 位示图中为“0”的位,根据查到的位所在的字号和位号可计算出对应的块号,同时在该位填上占用 标志“1”,并填写页表;不够用,分配失败。 块号=字号*字长+位号 主存回收策略 根据页表归还存储空间时,可以根据归还块的块号推算出在位示图中的位置: 字号=[块号/位示图中字长] 位号=块号mod位示图中字长 然后把这一位的“1”清成“0”,表示该块成为空闲块了 最后回收页表所占用空间 内存部分分为32个物理块,当为分配时均为绿色,分配后变为红色, 进程正在读取的物理块显示 黄色。 4 设备部分 设备管理主要包括设备的分配和回收。 设备的模拟 模拟系统中有A、B、C三种独占型设备,A设备3个,B设备2个,C设备1个。 数据结构 因为模拟系统比较小,因此只要设备表设计合理既可。

2010-05-17

C# socket 源码 多人聊天

C#是微软随着VS.net新推出的一门语言。它作为一门新兴的语言,有着C++的强健,又有着VB等的RAD特性。而且,微软推出C#主要的目的是为了对抗Sun公司的Java。大家都知道Java语言的强大功能,尤其在网络编程方面。于是,C#在网络编程方面也自然不甘落后于人。本文就向大家介绍一下C#下实现套接字(Sockets)编程的一些基本知识,以期能使大家对此有个大致了解。首先,我向大家介绍一下套接字的概念。   套接字基本概念:   套接字是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。可以将套接字看作不同主机间的进程进行双向通信的端点,它构成了单个主机内及整个网络间的编程界面。套接字存在于通信域中,通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念。套接字通常和同一个域中的套接字交换数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序)。各种进程使用这个相同的域互相之间用Internet协议簇来进行通信。   套接字可以根据通信性质分类,这种性质对于用户是可见的。应用程序一般仅在同一类的套接字间进行通信。不过只要底层的通信协议允许,不同类型的套接字间也照样可以通信。套接字有两种不同的类型:流套接字和数据报套接字。   套接字工作原理:   要通过互联网进行通信,你至少需要一对套接字,其中一个运行于客户机端,我们称之为ClientSocket,另一个运行于服务器端,我们称之为ServerSocket。   根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。   所谓服务器监听,是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。   所谓客户端请求,是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。   所谓连接确认,是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

2009-12-30

计算机网络原理 CRC C# socket 路由算法

实验一 3 1.实验内容 3 2.实验原理 3 3.实现过程 5 4.运行结果 9 实验二 9 1.实验内容 9 2.实验原理 9 3.实现过程 10 4.运行结果 16 实验三 20 1.实验内容 20 2.实验原理 20 3.实现过程 21 心得体会 25 参考文献 26

2009-12-30

汇编实验 源码 斐波那契函数FIB(N) 统计学生成绩

一、实验--斐波那契函数FIB(N) 3 1.实验目的和要求 3 2.实验内容描述 3 3.程序流程图 3 4.程序源码 4 5.运行结果 7 二、实验--统计学生成绩 7 1.实验目的和要求 7 2.实验内容描述 7 3.程序流程图 8 4.程序源码 9 5.运行结果 10 三、心得体会 10 四、参考文献 11

2009-12-30

编译原理 源码 实验报告

1.词法分析………………………………………. 2.语法分析………………………………………. 3.语义分析………………………………………. 4.心得体会……………………………………….

2009-12-30

北大ACM 题目分类 程序设计

对北京大学的OJ的题目做了详细的分类,对初参加ACM的人很有指导意义!

2009-11-04

ASP.NET 三层结构 源码 C#

该代码简单而且全面的实现了一个三层结构的留言板,对初学者很有指导意义!

2009-11-04

数字电路详细课件 电工技术

课件分为10个章节,详细的介绍了数字电路的各个部分,对想系统学习数字电路技术的人很有帮助!

2009-11-04

计算机组成原理 课件

对计算机组成原理做了最基本的介绍,适合初学者快速掌握计算机的内部结构和工作过程!

2009-11-04

C++模板类二叉查找树的实现

这个程序实现了二叉查找树的删除,增加,先序遍历,后序遍历,中序遍历,还有一些非递归和层次遍历!

2009-05-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除