- 浏览: 753166 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
lgh1992314:
a offset: 26b offset: 24c offse ...
java jvm字节占用空间分析 -
ls0609:
语音实现在线听书http://blog.csdn.net/ls ...
Android 语音输入API使用 -
wangli61289:
http://viralpatel-net-tutorials ...
Android 语音输入API使用 -
zxjlwt:
学习了素人派http://surenpi.com
velocity宏加载顺序 -
tt5753:
谢啦........
Lucene的IndexWriter初始化时的LockObtainFailedException的解决方法
fundamental networking in java: 1.summary 用java开发网络编程应用优势在于: 1.跨平台型 2.轻量级线程模型 网络编程跟多线程结合 3.安全性 没有指针,垃圾回收机制;很好的异常处理机制,oom异常也能捕获;未捕获的运行时异常只影响所在的线程,不影响进程。 4.可扩展性灵活性,以及良好丰富的类库。java的网络库更简单易用。 2 IP: Socket:一台机器的通讯节点称为socket,在java中,socket是java.net包里面的Socket,ServerSocket,DataGramSocket,MultiSocket的实例。 IP地址java中用java.net.InetAddress来表示。 java network address class包括: InetAddress:ip地址或者域名,指向远程地址。如果域名解析不了,则出错。 抽象类,有两个子类:Inet4Address和Inet6Address。这两个类智能通过InetAddress的静态方法获取,不能直接构造。包可见。 InetSocketAddress extends SocketAddress:ip socket地址,用{ip,port}或者{hostname,port}表示。也能够单独用port构造,表示本机ip地址,所有本机网络地址。 NetwordInterface:本机网络接口,由多个网络接口名称和对应的网络接口的ip地址列表构成。 网络主机有两个特殊的网络地址: loopback:127.0.0.1 用来检测本机的host名称,或者检测本地ip地址是否可用 wildcard:0.0.0.0 绑定了本机所有的ip地址 IPV6支持IPV4,可以通过以下的环境变量对ipv4和ipv6进行设置 java.net.preferlPv4Stack false(default)/true false:表示支持ipv4heipv6,true表示只支持ipv4, java.net.preferlPv6Address false(default)/true false,如果ipv6可用,则ipv4地址会覆盖掉ipv6地址,如果为true,则ipv6会覆盖ipv4地址,通讯地址使用ipv6. 3.TCP: 可靠的,基于流的连接,双向的 两种TCP socket:active和passive(listening) serversocket:create a socket->binds to a port -> listen() -> loop accepte client connect -> read/write client socket:create a socket -> connect to a address -> read/write 连接:三次握手:最多重试三次,第一次3-6s,后面double。 关闭连接:四次握手 server socket: 如果port设置为0,不设置,则系统会自动分配一个端口。如果设置为1-1023端口,需要高级用户权限。 backlog:请求队列最大长度,服务器端等待请求的最大队列数。默认50. localaddress:server监听的本机地址,默认是所有的。 setReuseAddress(boolean on):如果停止服务之后,需要马上重启服务,那么之前的端口可能还占用导致启动不了。设置该参数表示该地址可以重用。 setReceiveBufferSize (int size):设置接收缓冲区大小。必须在绑定端口之前设置。为了达到更大的吞吐量,可以设置得大一点(>64k)。但是跟sendBufferSize最好配合使用。 client socket: 如果port不设置,则默认跟连接的server一致。 setSendBufferSize(int size)必须在connect之前设置 Socket IO: DataOutputStream DataInputStream ObjectInputStream ObjectOutputStream 可能导致死锁:下面两行代码顺序可能导致死锁,因为server和client的ObjectInputStream都尝试读取对方的object stream header的数据,这样导致server和client都在等待,处于死锁。获取ObjectOutputStream必须在获取ObjectInputStream之前。 ObjectInputStream in = new ObjectInputStream(socket.getInputStream()); ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream()); InputStream.available()获取当前socket buffer的大小。 channel IO: output shutdown:半关闭 class Socket { void shutdownOutput() throws IOException; boolean isOutputShutdown(); } 特点:1.可读不可写;2.当socket关闭时,会close该连接。3.另一端read时会得到EOF异常 在proxy中,copy input to output时需要close output,这样才能把代理端的EOF也复制。如果不需要read操作,可以关闭output,减少reply数据的计算和传输的资源。 Socket.close()异步操作 input shutdown:半关闭 class Socket { void shutdownInput() throws IOException; boolean isInputShutdown(); } 特点:1直接丢弃数据,远程端无法感知本地已经关闭input。 close a connected socket: class Socket { void close() throws IOException; boolean isClosed(); } 1.socket.close() 2 socket.getOutputStream().close(); 3 socket.getInputStream().close(); close a server socket: class ServerSocket { void close() throws IOException; boolean isClosed(); } socket factory: java 提供三种socket factory: java.net socket factory:SocketImplFactory Socket类的public static synchronized void setSocketImplFactory(SocketImplFactory fac)只能在一个jvm中调用一次,需要RuntimePermission ‘setFactory’ RMI socket factory:RMISocketFactory RMIServerSocketFactory RMIClientSocketFactory ssl socket factory. socket:sendbuffer和receivebuffer的大小由tcp协议栈决定,不是由jvm。传统的tcp实现默认是2kb,但是现在更多的如28kb,32kb,64kb。 1.以太网最好从4kb增大到16kb >=3 * MSS sendbuffer>=receivebuffer 2.如果应用读取数据很慢,那么receivebuffer要设置得大一点,避免阻塞sendbuffer。 3.应用程序如果要发送也要接受大量数据,则需要增加这两个值。 4.java中最好使用bufferoutputStream或者ByteBuffer,来写入足够数据的TCP块。 //立刻发送urgentdata的数据,而write的数据要flush之后才发送。server和client都要同时开启。 socket.setOOBInline(true); socket.sendUrgentData(65); public void setTrafficClass(int tc) * <UL> * <LI><CODE>IPTOS_LOWCOST (0x02)</CODE></LI> * <LI><CODE>IPTOS_RELIABILITY (0x04)</CODE></LI> * <LI><CODE>IPTOS_THROUGHPUT (0x08)</CODE></LI> * <LI><CODE>IPTOS_LOWDELAY (0x10)</CODE></LI> * </UL> If the * application prefers short connection time over both low latency and high * bandwidth, for example, then it could invoke this method with the values * <tt>(1, 0, 0)</tt>. If the application prefers high bandwidth above low * latency, and low latency above short connection time, then it could * invoke this method with the values <tt>(0, 1, 2)</tt>. public void setPerformancePreferences(int connectionTime, int latency, int bandwidth) scaable IO: channel create: FileChannel FileInputStream.getChannel(); FileChannel FileOutputStream.getChannel(); FileChannel RandomAccessFile.getChannel(); SocketChannel channel = SocketChannel.open(); Socket socket = channel.socket(); ServerSocketChannel channel = ServerSocketChannel.open(); ServerSocket serverSocket = channel.socket(); DatagramChannel channel = DatagramChannel.open(); DatagramSocket datagramSocket = channel.socket(); // Pipe pipe = Pipe.open(); Pipe.SinkChannel sinkChannel = pipe.sink(); Pipe.SourceChannel sourceChannel = pipe.source(); Stream和channel的转换:Channels.java //not buffered,not support mart/reset operation;thread safe;only be use in blocking mode;closing them cause the underlying channel to be closed; class Channels { // convert streams to channels static ReadableByteChannel newChannel(InputStream is); static WritableByteChannel newChannel(OutputStream os); // convert channels to streams static InputStream newInputStream(ReadableByteChannel ch); static OutputStream newOutputStream(WritableByteChannel ch); } selector的select方法:如果返回0,则可能超时selector被异步唤醒;a register key被异步取消。 selectkey set只有在调用select(),select(long timeout)才被更新,处理完之后需要显示remove掉已经处理过得selectkey。 selector.wakeup() will cause的next first block return immediately。wakeup():set a boolean status blocking TCP connect():connect() ilock noblocking TCP connect():cnnect() return true immediately,finishConnect() to check connect is ok.isConnectionPending() and finishConnect() only user in noblocking mode. socketChannel.close();1.cannel the selectkey associated with the channel;2 channel.close();must invoke selector.selectNow(); 1.only use OP_CONNECT on unconnect socket;it must be removed from keys as soon as channel is ready;2.only use OP_WRITE on connect socket; firewalls:1.transport firewalls;2application firewalls. HTTP proxy server:java 能够通过设置环境变量http.proxyHost和http.proxyPort通过代理服务器发送http请求。to get http tunnelling in rmi or httpConnect. Socket proxy:socksProxyHost and socksProxyPort to user a socket proxy java.net.Proxy: secure socket handShake protocal: SSlSocket:1.firest create take more time;2use bufferOutputStream;3 not support OOBinline;4.SSlSocket.getInputStream().available() always return 0. 5.serveer/client must close at the same time,not support shutdownInput or shutDownoutput (a) To view all debugging messages: -Djavax.net.debug=all (b) To view the hexadecimal dumps of each handshake message: -Djavax.net.debug=ssl:handshake:data (c) To view the hexadecimal dumps of each handshake message, an trust manager tracing (the commas are optional): -Djavax.net.debug=SSL:handshake:data:trustmanager SSL system properties: https.cipherSuites https.protocals https.proxyHost https.proxyPort java.net.protocal.handler.pkgs javax.net.debug javax.net.ssl.keyStore javax.net.ssl.keyStorePassword javax.net.ssl.keyStoreType javax.net.trustStore javax.net.trustStorePassword javax.net.trustStoreType scalable secure socket: javax.net.ssl.Sslengine unicast UDP: ipv4 65507byte udp:512byte a ip package size udp:没有建立连接和关闭连接的开销;服务器和客户端管理简单; a:trasaction is request-reply;b:payloads is small;c:servers are stateless;d:Trasactions can be repeated; receive, send is synchronized reliable UDP:(DNS) 1.sequence number; 2 timeout and retransmits ACK and NACK based protocol scalable UDP: muliticast UDP: 1. multicast address a dynamic group address resuce the load;receive the package almost at the same time;fesable; reliable;co-operation from routers;security; 2. broadcast a static group address 3. IPV6 anycast only receive by any one of the group members TTL based Scopes Address based Scopes Tree-based protocals NACK-based protocals ACL Reactor,Proactor,leader-follower server
发表评论
-
对字符串进行验证之前先进行规范化
2013-09-17 23:18 13947对字符串进行验证之前先进行规范化 应用系统中经常对字 ... -
使用telnet连接到基于spring的应用上执行容器中的bean的任意方法
2013-08-08 09:17 1471使用telnet连接到基于spring的应用上执行容器中 ... -
jdk7和8的一些新特性介绍
2013-07-06 16:07 10110更多ppt内容请查看:htt ... -
java对于接口和抽象类的代理实现,不需要有具体实现类
2013-06-12 09:50 2952原文链接:http://www.javaarch.net/j ... -
Java EE 7中对WebSocket 1.0的支持
2013-06-05 09:27 3837原文链接:http://www.javaarch.n ... -
Java Web使用swfobject调用flex图表
2013-05-28 19:05 1121Java Web使用swfobject调用 ... -
spring使用PropertyPlaceholderConfigurer扩展来满足不同环境的参数配置
2013-05-21 15:57 3332spring使用PropertyPlaceholderCon ... -
java国际化
2013-05-20 20:57 4472java国际化 本文来自:http://www.j ... -
RSS feeds with Java
2013-05-20 20:52 1214RSS feeds with Java 原文来自:htt ... -
使用ibatis将数据库从oracle迁移到mysql的几个修改点
2013-04-29 10:40 1674我们项目在公司的大战略下需要从oracle ... -
线上机器jvm dump分析脚本
2013-04-19 10:48 2905#!/bin/sh DUMP_PIDS=`p ... -
eclipse远程部署,静态文件实时同步插件
2013-04-06 20:18 5460eclipse 远程文件实时同步,eclipse远程 ... -
java价格处理的一个问题
2013-03-26 21:21 1829我们经常会处理一些价格,比如从运营上传的文件中将某 ... -
java 服务降级开关设计思路
2013-03-23 16:35 3764java 服务屏蔽开关系统,可以手工降级服务,关闭服 ... -
poi解析excel内存溢出
2013-03-20 22:21 6397真是悲剧啊,一个破内部使用系统20多个人使用的后 ... -
简单web安全框架
2013-03-16 11:56 1543web安全框架,主要用servlet filter方 ... -
基于servlet的简单的页面缓存框架
2013-03-11 19:27 1215基于servlet的页面级缓存框架的基本用法: 代码参考: ... -
Eclipse使用过程中出现java.lang.NoClassDefFoundError的解决方案
2013-02-01 17:22 1572如果jdk,classpath设置正确,突然在eclipse ... -
jetty对于包的加载顺序的处理
2013-01-28 22:58 41301.问题 今天在本地和测试环境用jet ... -
hsqldb源码分析系列6之事务处理
2013-01-20 15:20 1706在session的 public Result ...
相关推荐
### 关于《Advanced JAVA Networking.pdf(第二版)》的关键知识点 #### 一、Java网络编程的重要性及优势 在《Advanced JAVA Networking.pdf(第二版)》中,作者首先强调了Java不仅仅是一种用于创建网页动画(如...
Java Networking
《Java Networking and AWT Bible》是一本深入探讨Java网络编程和AWT(Abstract Window Toolkit)图形用户界面库的权威指南。这本书旨在帮助开发者理解和利用Java平台的网络功能以及构建丰富的图形用户界面。以下是...
本文将详细解析"Java Networking and Proxies Code"这一主题,包括如何启动一个线程来检查URL是否通过代理以及如何获取代理的详细信息。 首先,让我们了解一下Java中的网络编程基础。Java提供了`java.net`包,该包...
JAVA NETWORKING分分钟轻松掌握,你就是未来的编程大拿
### Java Networking API 概览 #### 一、引言 Java Networking API(`java.net`包)为开发者提供了丰富的接口和类,支持多种网络通信功能,包括但不限于地址处理、TCP连接建立、通过UDP发送接收数据报包、定位及...
First and foremost, it presents each Java networking API with real intelligence and enthusiasm. The authors of the second edition (who have revised the book thoroughly) prove they have considerable ...
java 网络编程 html格式java 网络编程 html格式java 网络编程 html格式java 网络编程 html格式java 网络编程 html格式java 网络编程 html格式
### 高级Java网络编程概览 #### 一、引言与背景介绍 在过去的几年里,Java作为一种新兴的编程语言迅速崛起,并以其强大的功能、易用性以及跨平台特性吸引了大量的开发者。尽管如此,大多数开发者依然倾向于使用C或...
# 高级Java网络编程详解 ## 引言与背景 在深入了解《高级Java网络编程》之前,我们先简要回顾一下Java的历史及其在网络编程领域的重要性。Java自诞生以来就被视为互联网时代的一种语言,它以其跨平台性、安全性...
### 基础网络编程在Java中的应用 #### 核心知识点概述 本文将深入探讨《基础网络编程在Java中》这一主题所涵盖的核心概念和技术。本书填补了Java编程语言和平台在网络编程方面长期存在的文档空白,提供了从Java ...
Chapter 21 Java Networking Chapter 22 Java Database Connectivity Chapter 23 Java Threads Chapter 24 Concurrency Utilities Chapter 25 Security Chapter 26 Java Web Applications Chapter 27 JavaServer ...
根据提供的部分信息,我们将重点介绍三本被广泛推荐的经典Java书籍:《Thinking in Java》、《Java Collections》以及《Java Networking Programming》,并简要提及其他几个方面如数据结构、Web开发和设计模式等。...
Advanced Java Networking
- **1_5 Java Networking**: 这部分可能介绍Java如何进行网络通信,包括Socket编程、URL类、HTTP协议的实现,以及数据的序列化和反序列化。 6. **Java平台与J2EE** - **3_1 J2EEOverview** 和 **3_2 Java EE 5 ...
《高性能浏览器网络》是一本深度探讨Web和互联网通信技术的专业书籍,对于从事Web开发和互联网相关工作的人员来说,是不可或缺的参考资料。... ... ...服务器推送技术让服务器能够预发送资源,进一步优化用户体验。...