- 浏览: 87904 次
- 性别:
- 来自: 深圳
最新评论
-
spdx4046:
我发现用数组和不用数组的差别很大很大哎!
比如: ...
Java NIO ByteBuffer -
comeonbabye:
楼主的确是心情不畅,导致思维缓慢。
类似的经历我也有过。哪天 ...
一次失败的面试 -
yysct2005:
解释:
功能权限:能做什么的问题,如增加销售订单;
数据权 ...
权限系统设计 -
yysct2005:
1、权限模型本质要素分为三个:主体+动作+客体
------ ...
权限系统设计 -
kv0002:
虽然看得不是很懂,但一定要顶
转载 ---【译】构建可扩展的Java EE应用(二)
事实上网络编程简单的理解就是两台计算机相互通讯数据而已.对于程序员而言,去掌握一种编程接口并使用一种编程模型相对就会显得简单的多了。Java SDK提供一些相对简单的Api来完成这些工作。Socket就是其中之一。对于Java而言,这些Api存在与java.net 这个包里面。因此只要导入这个包就可以准备网络编程了。
网络编程的基本模型就是客户机到服务器模型。简单的说就是两个进程之间相互通讯,然后其中一个必须提供一个固定的位置,而另一个则只需要知道这个固定的位置,并去建立两者之间的联系。然后完成数据的通讯就可以了。这里提供固定位置的通常称为服务器,而建立联系的通常叫做客户端。基于这个简单的模型,就可以进入网络编程啦。 Java对这个模型的支持有很多种Api。而这里我只想介绍有关Socket的编程接口。对于Java而言已经简化了Socket的编程接口。首先我们来讨论有关提供固定位置的服务方是如何建立的。Java提供了ServerSocket来对其进行支持,事实上当你创建该类的一个实力对象并提供一个端口资源你就建立了一个固定位置可以让其他计算机来访问你。ServerSocket server=new ServerSocket(6789);这里稍微要注意的是端口的分配必须是唯一的。因为端口是为了唯一标识每台计算机唯一服务的。另外端口号是从0~65535之间的,前1024个端口已经被Tcp/Ip 作为保留端口,因此你所分配的端口只能是1024个之后的。好了,我们有了固定位置.现在所需要的就是一根连接线了。该连接线由客户方首先提出要求。因此Java同样提供了一个Socket对象来对其进行支持。只要客户方创建一个Socket的实例对象进行支持就可以了。Socket client=new Socket(InetAddress.getLocalHost(),5678);客户机必须知道有关服务器的IP地址。对于着一点Java也提供了一个相关的类InetAddress。该对象的实例必须通过它的静态方法来提供。它的静态方法主要提供了得到本机IP 和通过名字或IP直接得到InetAddress的方法。 好了.上面的方法基本可以建立一条连线让两台计算机相互交流了。可是数据是如何传输的呢?事实上I/O操作总是和网络编程息息相关的。因为底层的网络是继续数据的,除非远程调用,处理问题的核心在执行上。否则数据的交互还是依赖于IO操作的.所以你也必须导入java.io这个包。java的IO操作也不复杂,它提供了针对于字节流和Unicode的读者和写者,然后也提供了一个缓冲用于数据的读写。 BufferedReader in=new BufferedReader(new InputStreamReader(server.getInputStream())); 上面两句就是建立缓冲并把原始的字节流转变为Unicode可以操作。而原始的字节流来源于Socket的两个方法。getInputStream()和getOutputStream()方。分别用来得到输入和输出。那么现在有了基本的模型和基本的操作工具。我们可以做一个简单的Socket例程了。 服务方: import java.io.*; 这个程序的主要目的在于服务器不断接收客户机所写入的信息只到。客户机发送"End"字符串就退出程序。并且服务器也会做出"Receive"为回应。告知客户机已接收到消息。 客户机代码: import java.net.*; 客户机代码则是接受客户键盘输入,并把该信息输出,然后输出"End"用来做退出标识。 这个程序只是简单的两台计算机之间的通讯。如果是多个客户同时访问一个服务器呢?你可以试着再运行一个客户端,结果是会抛出异常的。那么多个客户端如何实现呢? 其实,简单的分析一下,就可以看出客户和服务通讯的主要通道就是Socket本身。而服务器通过accept方法就是同意和客户建立通讯。这样当客户建立Socket的同时。服务器也会使用这一根连线来先后通讯。那么既然如此只要我们存在多条连线就可以了。那么我们的程序可以变为如下: 服务器: import java.io.*; 这里仅仅只是加了一个外层的While循环。这个循环的目的就是当一个客户进来就为它分配一个Socket直到这个客户完成一次和服务器的交互,这里也就是接受到客户的"End"消息。那么现在就实现了多客户之间的交互了。但是问题又来了。这样做虽然解决了多客户,可是是排队执行的。也就是说当一个客户和服务器完成一次通讯之后下一个客户才可以进来和服务器交互,无法做到同时服务。那么要如何才能同时达到既能相互之间交流又能同时交流呢?很显然这是一个并行执行的问题了。所以线程是最好的解决方案。 那么下面的问题是如何使用线程.首先要做的事情是创建线程并使得其可以和网络连线取得联系,然后由线程来执行刚才的操作,要创建线程要么直接继承Thread要么实现Runnable接口,要建立和Socket的联系只要传递引用就可以了,而要执行线程就必须重写run方法。而run方法所做的事情.就是刚才单线程版本main所做的事情。因此我们的程序变成了这样: import java.net.*; 我的类直接从Thread类继承了下来。并且通过构造函数传递引用和客户Socket建立了联系。这样每个线程就有了一个通讯管道,同样我们可以填写run方法,把之前的操作交给线程来完成。这样多客户并行的Socket就建立起来了。 |
发表评论
-
Java NIO编程关注点
2011-12-02 18:01 1136阅读yanf4j源码对于read事件、write事件的笔记 ... -
Java NIO ByteBuffer
2011-12-02 17:39 1165在 NIO 库中,所有 ... -
MINA ByteBuffer熟悉
2011-12-02 15:43 1553前不久,一个客户使用MINA架构服务器,在与客户端通信时, ... -
网络编程TCP通信的粘包问题讨论
2011-11-16 18:43 3392第一个需要讨论的大 ... -
memcached
2010-12-02 17:47 803做过的项目中Hibernate都 ... -
Java 正则表达式全攻略(八)
2010-11-18 14:49 860Java 正则表达式全攻略(八) ... -
Java 正则表达式全攻略(七)
2010-11-18 14:48 691Java 正则表达式全攻略(七) ... -
Java 正则表达式全攻略(七)
2010-11-18 14:45 771Java 正则表达式全攻略(七) ... -
Java 正则表达式全攻略(六)
2010-11-18 14:44 857Java 正则表达式全攻略( ... -
Java 正则表达式全攻略(五)
2010-11-18 14:43 1277Java 正则表达式全攻略(五) ... -
Java 正则表达式全攻略(四)
2010-11-18 14:42 1444Java 正则表达式全攻略(四) ... -
Java 正则表达式全攻略(三)
2010-11-18 14:40 1240Java 正则表达式全攻略(三) ... -
Java 正则表达式全攻略(二)
2010-11-18 14:39 1176Java 正则表达式全攻略(二) ... -
Java 正则表达式全攻略(一)
2010-11-18 14:37 1416Java 正则表达式全攻略(一) [ 2010-04 ... -
Hibernate获取数据方式与缓存使用
2010-06-30 14:28 559Hibernate获取数据的方式有不同的几种,其与缓存结合 ... -
log4j配置祥解
2010-01-28 16:41 654log4j配置祥解 第一步:加入log4j-1.2.8 ... -
如何配置和使用Tomcat访问日志
2010-01-28 14:48 935配置位置在log下的server.xml,(tomcat容 ... -
java.util.ResourceBundle使用详解
2009-11-27 14:05 769java.util.ResourceBundle使用详解 ... -
JDBC的陷阱
2009-11-27 14:04 7931、conn一定要在finally语句块进行关闭。2、Stat ... -
Java正则表达式语法
2009-08-06 21:08 1896正则表达式语法 正则 ...
相关推荐
Java Socket编程.pdf Java Socket编程.pdf Java Socket编程.pdf
java socket编程 java网络编程 课件 java socket编程 java网络编程 课件
Java Socket网络编程.pdf 学习资料 复习资料 教学资源
java socket 编程文档
关于Java_Socket编程的详细介绍,对java同学技术很有帮助,知道学习
浅谈Socket编程及Java实现,学习java socket编程
《Java TCP/IP Socket编程(原书第2版)》基于TCP/IP Socket相关原理,对如何在Java中进行Socket编程作了深入浅出的介绍。《Java TCP/IP Socket编程(原书第2版)》内容简明扼要,条理清晰,并在讲解相应的概念或编程...
java Socket 编程配套源码
java socket网络编程,包括服务与客户端,多线程支持多客户端同时在线。
JAVA网络编程资料(1)-Socket套接字—Java套接字编程.chm
Java Socket 编程 html教程
JAVA Socket 网络编程教程 JAVA Socket 网络编程教程
import java.io.*; import java.net.*; import java.util.*; import java.lang.*; public class Server extends ServerSocket { private static ArrayList User_List = new ArrayList(); private static ...
java socket 编程,Java socket 编程实例,对于初学者是一个非常好的东西,对于有过经验的是非常好的更深了解的东西,希望大家共同进步
JAVA Socket教程 Java网络编程之传输控制协议 Socket套接字—Java套接字编程
java socket 实现简单的客户端和服务端通信
浅出Java Socket编程浅出Java Socket编程浅出Java Socket编程浅出Java Socket编程浅出Java Socket编程
java socket编程 详细的介绍,实例的教学,网站形式,不过特实用
Java socket编程实例.pdf
Java Socket编程笔记_动力节点Java学院整理,动力节点口口相传的黄埔军校