Tcp通信严格区分客户端和服务器端,在通信时必须先由客户端去连接服务器端才能实现通信,服务器端不可以主动连接客户端,并且服务器端程序需要事先启动,等待客户端连接。

 

JDK提供两个类用于实现TCP程序,一个是ServerSocket类,用于表示服务器端;一个是Socket,用于表示客户端。

 

ServerSocket类提供了四种构造方法:

1.Serversocket()

该构造方法还需要继续调用bind(SocketAddress endpoint)方法将其绑定至指定端口才可以正常使用

2.Serversocket(int port)

该构造方法创建对象时,将其与端口号port进行绑定。端口号可以指定为0,此时系统会随机分配一个还没有被其他网络程序所使用的端口号。但因为克续断需要根据该端口号来房屋服务器端程序,所以一般不使用随机分配。

3.Serversocket(int port,int backlog)

backlog用于指定在服务器忙时,可以与之保持连接请求的等待客户数量,默认为50

4.Serversocket(int port,int backlog,InetAddress binAddr)

binAddr指定相关的IP地址,该构造函数常用于计算机上有多个网卡和多个IP的情况

 

ServerSocket常用方法:

1.Socket accept()   

等待客户端连接,在客户端连接之前一直处于阻塞状态,如果有客户端连接就会返回一个与之对应的Socket对象,接收客户端请求

2.InetAddress getInetAddress()

用于返回一个InetAddress对象,该对象中封装了ServerSocket绑定的Ip地址

3.Boolean isClosed()

4.Void bind(SocketAddress endpoint)

用于将ServerSocket对象绑定至指定的Ip地址和端口号,其中参数endpoint封装了IP地址和端口号

 

Socket类提供了三种构造方法

1.Socket()

调用该构造方法之后,还需要调用connect(SocketAddress endpoint)方法,完成与指定服务器端连接。Endpoint用于封装IP地址和端口号

2.Socket(String host,int port)

参数host接收的是一个字符串类型的IP地址,port为端口号

3.Socket(InetAddress address,int port)

参数address用于接收一个InetAddress类型的对象,该对象用于封装一个IP地址。

 

Socket常用方法:

1.int getPort()

返回Socket对象与服务器连接的端口号

2.InetAddress getLocalAddress()

用于获取Socket对象绑定的本地IP地址,并将IP地址封装成InetAddress类型的对象返回

3.Void close()

4.InputStream getInputStream()

返回一个InputStream类型的输入流对象,如果该对象是由服务器端的Socket调用,就用于读取客户端发送的数据,反之读取服务器端发送的数据。

5.OutputStream getOutputStream()

返回一个OutputStream类型的输出流对象,如果该对象是由服务器端的Socket调用,用于向客户端发送数据,反之,用于向服务器发送数据。