Socket用法详解.docx

上传人:p** 文档编号:1062353 上传时间:2024-06-29 格式:DOCX 页数:21 大小:31.80KB
下载 相关 举报
Socket用法详解.docx_第1页
第1页 / 共21页
Socket用法详解.docx_第2页
第2页 / 共21页
Socket用法详解.docx_第3页
第3页 / 共21页
Socket用法详解.docx_第4页
第4页 / 共21页
Socket用法详解.docx_第5页
第5页 / 共21页
Socket用法详解.docx_第6页
第6页 / 共21页
Socket用法详解.docx_第7页
第7页 / 共21页
Socket用法详解.docx_第8页
第8页 / 共21页
Socket用法详解.docx_第9页
第9页 / 共21页
Socket用法详解.docx_第10页
第10页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《Socket用法详解.docx》由会员分享,可在线阅读,更多相关《Socket用法详解.docx(21页珍藏版)》请在第壹文秘上搜索。

1、在客户/服务器通信模式中,客户端纪要主动创建与服务器连接的SOCket(套接字),服务器端收到了客户端的连接恳求,也会创建与客户连接的Socket.Socket可看诧是通信连接两端的收发器,服务器与客户端都通过Socket来收发数据.这篇文章首先介绍Socket类的各个构造方法,以及成员方法的用法,接着介绍SoCket的一些选项的作用,这些选项可限制客户建立与服务器的连接,以及接收和发送数据的行为.-.构造SocketSocket的构造方法有以N几种垂枝形式:SoCketoSocket(InetAddressaddress,intport)throwsUnknowHostException,I

2、OExceptionSocketfInetAddressaddress,intport,InetAddressIocaIAddr,intIocaIPort)throwsIOExceptionSocket(Stringhost,intport)throwsUnknovzHostException,IOExceptionSoCket(Stringhost,Intport,InetAddressIocaIAddr1intIocaIPort)throwsIOException除了第一个不带参数的构造方法以外,其他构造方法都会试图建立与服务器的连接,假如连接胜利,就返回Socket对象;假如因为某些缘由

3、连接失败,就会抛出IOExcept.on.1.1 运用无参数构造方法,设定等待建立连接的超时时间Socketsocket=newSocket();SocketAddressremoteAddr=newInetSoCketAddreSS(osIhOSt”,8000);socket.connect(remoteAddr,60000);等待建.立连接的超时时间为1分钟以上代码用丁连接到本地机器上的监听8000转口的服务器程序,等待连接的最长时间为1分钟.假如在1分仲内连接胜利则COnneto方法顺当返回;假如在1分钟内出现某种异样,则她出该异样;他如超过1分钟后,即没有连接胜利,也没有出现其他异样,

4、那么会拍出SOCketTimeOUtEXCePtion.Sket类的ConnecusocketAddressendpointJnttimeout)方法仇说连接服务器,参数endpomt指定蜃务器的地址,参数timeout设定超时数据,以学秒为单位.假如参数timeout谀为0,表示恒久不会超时,默认是不会超时的.1.2 设:定服务器的地址除了第一个不带参数的构造方法,其他沟造方法都须要在参数中设定服务器的地址,包括服务器的IP地址或主机名,以及布口;SocketfInetAddressaddress,intport)第个参数address表示主机的IP地址SoCkeUStringhost,in

5、tport)第一个参数host表示主机的名字InetAddress类表示服务器的IP地址,InetAddress类供应系列静态工厂方法,用于构造自身的实例,例如:返回本地主机的IP地址InetAddressaddrl=lnetAddress.get1.ocalHost();返回代表222.3457的IP地址InetAddressaddr2=lnetAddress.getByName(222.34.5.7);返回域名为javathinker.org的IP地址InetAddressaddr3=letAddress.getByName(javathinker.org);1.3 设定客户端的地址在个S

6、ocket对象中,即包含远程服务器的IP地址和端口信息,也包含本地客户端的IP地址和雄Il信息.就认状况”客户端的IPifti11尸客户和阴“!:的上机,客户端的加然网课作系统随机安排.Socket类还有两个构造方法允许显式地设置客户端的IP地址和端口:参数IocaIAddr和IOCalPOrt用来设置客户端的IP地址和端”SOCketUnetAddreSSaddress,intport,InetAddressIocaIAddr,intIocaIPort)throwsIOExceptionSocket(Stringhost,intport,InetAddressIocaIAddr,intIoc

7、aIPort)throwsIOException假如一个主机同时属于两个以上的网络,它就可能拥有两个以上的IP地址.例如,一个主机在Internet网络中的IP地址为-222.67.1.34,在一个局域网中的IP地址为-112.543”.假定这个主机上的客户程序希望和向个局域网的个服务器程序(地址为:11254.45:80(Xr)通信,客户端可依据如卜方式构造Socket对您:InetAddressremoteAddrl=lnctAddress.gctByName(112.5.4.45);InetAddressIocaIAddrl=InetAddreSSEetByNamerll2.5.4.3)

8、;SocketSocketl三newSOcket(remoteAddrl,8000,IocaIAddrl,2345);客户端运用缩口23451.4 客户连接服务器时可能抛出的异Fl当Socket的构造方法恳求连接服务器时,可能会抛出下面的异样.UnKnownHostException:假如无法识别主机的名字或IP地址,就会抛出这种异样.ConnectEXCePtion:假如没有服务器进程监听指定的端口,或者服务器进程拒绝连接,就会摘出这种异样.SocketTimeoutException:钱如等待连接卸时,就会抛出这种异样.BindException:假如无法把Socket对收。指定的本地IP

9、地址改制11绑定,就会抛出这种异样.以上4中异样都是IOException的干脆或间接子类.如图2-1所示.IOExceptionUnknownHostException-InterruptediOExcepttonSocketTimeoutExcepttonI-SocketExceptionBindExceptionIConnectException图2-1客户端连接服务器时可能抛出的异样二,获得Socket的信息住一个Socket对象中同时包含了远程服务器的IP地址和端口信息,以及客户本地的IP地址和端口信息.此外,从Socket对象中还可以获得输出流和输入流,分别用丁向服务器发送数据,以

10、及接收从服务器端发来的数据.以下方法用于找得Socket的有关信息.getl11etAddress():获得远程服务器的IP地址.getPort():获得远程服务器的端口.get1.ocalAddress():获得客户本地的IP地址.get1.ocalPort():获得客户本地的箍口.getlnputStream():获得输入流.假如Socket还没仃连接,或者已经关闭,或拧已经通过ShutdownInputO方法关闭输入流,那么此方法会抛出IOExceptIon.getOutputStream():狭得输出流,合如Socket还没有连接,或者己经关闭,或者已经通过ShutdownOutput

11、O方法关闭输出流,那么此方法会抛出IOException.这里有个HTTPCIient类的例子,代码我是写好了,也测试过了,因为篇幅缘由就不贴了.这个HTTPCIient炎用于访问网页javathinker.org/mdex.jsp.该网页位于个主机名(也叫域名)为javathinker.org的远程HTTP服务器上,它Ki听80端口.在HTTPCIient类中,先创建了一个连接到该H11P服务器的Socket对象,然后发送符合HTTP协议的恳来,接芥接收从HTTP服务器上发回的响应结果.,.关闭Socket当客户与限务器的通信结束,应当刚好关闭Socket,以糅放$。Cket占用的包括埔口在

12、内的各种资制Socket的close()方法负送关闭Socket.当一个Socket时象被关闭,就不能再通过它的输入源和输出流进行1/0操作,否则会导致IOException.为了输保关闭Socket的操作总是被执行,剧烈建议把这个操作放在finally代码块中:Socketsocket=null;try(socket=newSket(javathinker.org,80);执行接收和发送数据的操作catch(IOExceptione)e.printStackTrace();finallyy(If(SoCketI=null)socket.close();catch(IOExceptione)e

13、.printStackTracc();)SOCket类供应3个状态测试方法.isClosed():假如Socket已经连接到远程主机并Il还没有关闭,则返回true,否则返回false.isConnected():假如SocketW经连接到远程主机,则返回true,否则返回false.isBound(1:假如Socket已经与一个本地绑定,让返回true,否则返回false.假如要推断一个Socket对飘当前是否处于连接状态,可采纳以下方式:booleanisConnected=socket.isConnected()&!socket.isClosed();四.半关闭Socket进程A与进程B

14、通过Socket通信,找定进程A输出数据,进程B读入数据.进程A如何告知迸程B全陆数据已经输出完毕?下文略五.设巴SoCket的选项SoCket仃以下几个选项.TCP.NODEIAY:表示马上发送数据.So-RESUSEADDR:表示是否允许乘用Socket所绑定的本地地址.SO.TIMEOUT:表示接收数据时的等待超时数据.SojJNGER:表示当执行Socket的CbseO方法时,是否马上关闭底层的Socket.SO_SNFBUF:表示发送数据的缓冲区的大小.SO-RCVBUF:去示接收数据的短冲区的大小.SO.KEEPA1.IVE:表示对于长时间处于空闹状态的Socket,是否要自动把它

15、关闭.OOBIN1.INE:表示是否支持发送一个字H的TCP脍急数据.5.1 TCP_NODE1.AY选项设置该选项:PUbliCvoidsetTcpNoDelay(booleanon)throwsSocketException读取该选项:PUbliCbooleangetTcpNoDeIayf)throwsSocketException我认状况E,发送数据采纳Negale翼法.Negale算法是指发送方发送的数据不会马上发出,而是先放在缓冲区,等缓存区满了再发出.发送完批数据后,会等待接收方对这批数据的回应,然后再发送下一批数据.NegaIe法适用于发送方纪要发送大批量数据,并且接收方会刚好作出回应的场合,这种算法通过削减传输数据的次数来提高通信效率.假如发送方持续地发送小批量的数据,并且接收方不肯定会马上发送响应数据,那么Negale算法会使发送方运行很慢.对于GUI程序,如网络地戏程序(服务器须要实时踉踪客户端双标的移动),这个问题尤其突出.客户端鼠标位较改动的信息须要实时发送到旅务器上,由于Negale里法采纳缓冲,大大减低了实时响应速度,导致客户程序运行很慢.TCP_NODEIAY的默认位为false,我示采纳Negale算法.假如调用SeRCPNODelaWtrue)方法,就

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > Web服务

copyright@ 2008-2023 1wenmi网站版权所有

经营许可证编号:宁ICP备2022001189号-1

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。第壹文秘仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第壹文秘网,我们立即给予删除!