您的位置:首页 > 理论基础 > 计算机网络

Java tcp/ip socket 编程

2013-10-04 17:02 169 查看
Javatcp/ipsocket编程基本概念
套接字(socket)为实现程序间相互通信的编程应用接口(API),分为流套接字和数据报套接字
tcp流套接字提供了一种可信赖的字节流服务一个tcp/ip套接字由一个互联网地址,一个端到端协议和一个端口号确定
ip用互联网地址标识
uri统一资源标识符,包括url
url统一资源定位符
udp用户数据报协议提供了一个尽力而为的数据报服务,可以发送最长为65500字节的信息
拓展概念
使接受者准确地找到消息的结束位置方法1:基于定界符,消息的结束由一个唯一的标记指出,即消息的发出者在传输完整数据后显式添加一个特殊字节序列。这个特殊标记不能再传输数据中出现。(推荐使用单字节的特殊符号,例如:”\n”,这样可以直接在扫描读取信息的过程中进行判断)方法2:显式长度,在变长字段或消息前附加一个固定大小的字段,用来指示该字段或消息中包含了多少字节。
成帧与解析成帧技术解决了接收端如何定位消息的首尾位置的问题。解析就是找到消息。最简单的方法就是先定位消息的结束位置,然后将消息作为一个整体进行解析。
阻塞监听过程会阻塞。执行读数据方法却没有数据时会发生阻塞。写数据时没有足够的空间缓存传输的数据时会出现阻塞。
超时
保持活跃setKeepAlive(true)该机制在经过一段不活跃的时间后,将想另一个终端发出一个探测消息。如果另外一端还处于活跃状态就返回一个确认消息。如果经过几次尝试都没有收到确认消息,则终止发送探测消息,关闭套接字,并在下一次尝试io操作时抛出异常。
发送和接受缓存区大小
地址重用
消除缓冲延迟
紧急数据要发送紧急数据需要调用sendUrgentData()方法,它将发送其int参数的最低位字节。要接受这个字节,必须设置setOOBInline(true)启用接收者对频道外数据的接受。Java中紧急数据几乎没有什么用,因为紧急数据与常规字节按照传输顺序混在一起。实际上接收者并不能区分。
关闭后停留如果关闭后缓冲区还有没有发出去的数据,可能主机在后面某一个时刻出现故障。可以设置关闭后停留,setSoLinger(true),那么再调用close()方法将阻塞等待,直到远程终端对所有数据都返回了确认信息,或发生了指定的超时。
广播许可
通信等级
基于性能的协议选择Tcp不是套接字的唯一可选协议
使用netstat命令监控tcp连接状态详情看netstat-help
nio采用非阻塞方式
多任务处理
名称方法详细描述
一客户一线程一个监听,每个socket一个线程
线程池N个线程N个监听
关闭连接
关闭输入流或输出流关闭输出流可以输出结束标志-1,但不可以继续输出数据。
关闭socket关闭连接是协议中关键的一部分,一端调用close()发出关闭请求(close_wait),对方会读取到数据结束的-1标志,然后自动调用close()。
常用API
InetAddress
ServerSocket
Socket
DatagramPacket
接受数据实例DELIMITER=“\n”;inti=0;byte[]data=null;while((nextByte=in.read())!=DELIMITER){if(data==null){//in.available必须在in有数据的时候才能使用,已经读取的一个字节要加上data=newbyte[in.available+1];}data[i]=nextByte;i++;if(nextByte==-1){//数据已经读完break;}}
本文出自 “hiperfect” 博客,请务必保留此出处http://hiperfect.blog.51cto.com/2132079/1304597
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: