Socket

来源:互联网 发布:天金加银软件 编辑:程序博客网 时间:2024/05/17 10:26

Socket 构造方法:

1
2
3
4
5
Socket()
Socket(InetAddressaddress,intport)throwsUnknownHostExpection,IOExpection
Socket(InetAddressaddress,intport,InetAddresslocalAddress,intlocalPort)throwsUnknownHostExpection,IOExpection
Socket(Stringhost,intport)throwsUnknownHostExpection,IOExpection
Socket(Stringhost,intport,InetAddresslocalAddress,intlocalPort)throwsUnknownHostExpection,IOExpection

1. 三种构造方法,无参,只带Server信息,带Server和Client信息。 

2. 除了第一种无参构造方法,其他方法都要求建立连接,连接失败将抛出异常。

 

构造方法用法

1. 无参函数设定等待连接的超时时间,connect方法表示连接,单位毫秒,如果连接失败,将抛出SocketTimeoutExpection. 时间设置为0,将永不超时。

1
2
3
Socketsocket=newSocket();
SocketInetAddressaddress=newSocketInetAddress("localhost",8000);
socket.connect(address,6000);

2. 设定服务器地址和客户端地址。由于Socket是定向连接的,所以服务器和客户端的设定都可以在构造分中设定,服务器地址可以在connect()中设定,但是本地地址必须在构造函数中设定。

3. 连接过程中会抛出异常。

UnkownHostExpection:无法识别主机名和地址抛出的异常

ConnectExpection:没有服务器进程监听指定端口,或者服务器进程拒绝连接。

SocketTimeoutExpection:超时

BindExpection:Socket对象没有和本地IP地址或者端口绑定。

 

获取Socket信息

主要获取服务器地址和端口,本地地址和端口,输入流和输出流。

1
2
3
4
5
6
socket.getInetAddress():InetAddress
socket.getPort():int
socket.getLocalAddress():InetAdress
socket.getLocalPort():int
socket.getInputStream():InputStream
socket.getOutputStream():OutputStream

 

关闭Socket

关闭Socket的语句在finally语句中实现:

1
2
3
4
5
finally{
try{
if(socket!=null)socket.close();
}catch(IOExpectione){}
}

判断Socket当前是否处于连接状态

1
booleanisConnected=socket.isConnected()&&!socket.isClosed();


输入输出流管理

1. 如何判断数据传输已经完毕

        如果传输的字符流,可以约定一个结束的字符标志。

        或者在传输前先告知接收者数据的长度。

        当Socket关闭后,执行输入流的read()方法,会返回-1.说明数据传输已经完毕

2. 如何只关闭输入流或输出流 以及判断流是否关闭

1
2
3
4
shutdownInput();
shutdownOutput();
isInputShutdowm():boolean
isOutputShutdown():boolean

3. 流的开关对通信的影响



自然关闭Sender和Reciever的通信就是在传输语句结束后调用close()方法   接收到的数据是完整的提前终止Reciever   就是在传输过程中关闭了Reciever的输入流Sender会将所有数据发完,但是Reciever只会接收部分数据

 

 


 

 

0 0
原创粉丝点击