解决方案 »
- 怎么加入一个判定条件,根据当前线程的的名字,来做出动作。
- 求教一个关于split分割字符串以后赋值的问题,多谢了!
- 如何删除监听器
- 寻找一个函数(急,在线等)
- sun公布了jdk1.5的源代码,牛,太牛了,大家都下载吧,学习的好机会。
- Java 中怎么动态控制方法的控制符?
- 关于jbuilder9 + weblogic8.1的配置问题?
- ◆◆◆100分求sql server2000 jdbc配置方法,成功马上给100◆◆◆
- 请教:Java下用JAVA.UTIL.ZIP类压文件用ZIP8解压后文件变小不可用
- 请问有什么工具可以把JAR文件打开或查看其中的内容?
- java内存不够用如何扩展
- 关于线程的中处理集合一些问题. 100分赏金来了
使用socket通信还得注意异步发送消息啊,要不然双方都阻塞等待对方的数据。
人家就是多提供一个接口,并不管方法是否重复。根据自己需要选用。
第二个问题:
每个SOCKET都有发送缓冲和接收缓冲,发送缓冲是自己写时用的,接收缓冲是自己读时用的。这样保证自己写的不会被读到。
你本地的发送缓冲数据通过网络到对方后,会放在接收缓冲里,反之亦然。
URL的协议处理器的确是封装了socket
基本上是这个情况!
然后也可以参考下linux下的socket的实现(虽然也是视作文件,但是有一定的特殊性)。
关于第一个问题,你可以参考jdk 1.6的中文文档,我摘了一部分,如下:
抽象类 URLConnection 是所有类的超类,它代表应用程序和 URL 之间的通信链接。此类的实例可用于读取和写入此 URL 引用的资源。通常,创建一个到 URL 的连接需要几个步骤:openConnection() connect()
对影响到远程资源连接的参数进行操作。 与资源交互;查询头字段和内容。 ---------------------------->
时间
通过在 URL 上调用 openConnection 方法创建连接对象。
处理设置参数和一般请求属性。
使用 connect 方法建立到远程对象的实际连接。
远程对象变为可用。远程对象的头字段和内容变为可访问。
使用以下方法修改设置参数:setAllowUserInteraction
setDoInput
setDoOutput
setIfModifiedSince
setUseCaches
使用以下方法修改一般请求属性:setRequestProperty
使用 setDefaultAllowUserInteraction 和 setDefaultUseCaches 可设置 AllowUserInteraction 和 UseCaches 参数的默认值。上面每个 set 方法都有一个用于获取参数值或一般请求属性值的对应 get 方法。适用的具体参数和一般请求属性取决于协议。在建立到远程对象的连接后,以下方法用于访问头字段和内容:getContent
getHeaderField
getInputStream
getOutputStream
某些头字段需要经常访问。以下方法:getContentEncoding
getContentLength
getContentType
getDate
getExpiration
getLastModifed
提供对这些字段的便捷访问。getContent 方法使用 getContentType 方法以确定远程对象类型;子类重写 getContentType 方法很容易。一般情况下,所有的预连接参数和一般请求属性都可忽略:预连接参数和一般请求属性默认为敏感值。对于此接口的大多数客户端而言,只有两个需要的方法:getInputStream 和 getContent,它们通过便捷方法镜像到 URL 类中。有关 http 连接的请求属性和头字段的更多信息,可从以下位置找到: http://www.ietf.org/rfc/rfc2068.txt
有关 fileNameMap 的注意事项:在 JDK 1.1.6 以前的版本中, URLConnection 的 fileNameMap 字段是公共的。在 JDK 1.1.6 及以后的版本中, fileNameMap 字段是私有的;对其添加了 accessor 方法和 mutator 方法 getFileNameMap 及 setFileNameMap 以便访问。 Compatibility 页中也对此更改进行了介绍。 完成请求后,在一个 URLConnection 的 InputStream 或 OutputStream 上调用 close() 方法可以释放与此实例相关的网络资源,除非特定的协议规范为其指定了其他行为。希望可以帮到你。