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调用,用于向客户端发送数据,反之,用于向服务器发送数据。