1.使用ServerSocket创建TCP服务器端
使用tcp通信的两个通信实体是有服务器端、客户端之分(不过建立起了socket连接之后,就不用区分服务端与客户端了,两个实体之间可以互相通信了。建立起了socket连接的示意图如图1所示)。
java中能接收其他通信实体连接请求的类是ServerSocket,通过ServerSocket对象可以监听来自其他实体的socket连接,若没有连接,则ServerSocket对象一直等待。具体这个监听方法在下面:
- Socket accpet():这个方法返回一个Socket对象。当监听到到来自其他实体的socket请求时,则返回一个Socket对象;否则,该方法一直等待,线程也被阻塞。
当然,这里有几个用于ServerSocket对象的构造函数:
- ServerSocket(int port):用指定端口来创建一个ServerSocket。如ServerSocket server=new ServerSocket(8080),默认ip是本机ip(127.0.0.1),端口是8080。
- ServerSocket(int port,int backblog):增加一个用来改变连接队列长度的参数backlog(这里我也不是太清楚)。
- ServerSocket(int port,int backblog,InetAddress localAddress):在机器有多个ip时,允许设置localAddreess来指定将ServerSocket绑定到指定ip上。
2.使用Socket进行通信
好了,在了解完用ServerSocket创建TCP服务器端后,我们就可以使用Socket进行通信。首先Socket有如下两个构造函数:
- Socket(InetAddress/String remoteAddress,int port):第一个参数用于指定SocetServer的ip地址,可以是String对象也可以是InetAddrees对象,第二个参数时对应SocketServer的端口。
- Socket(InetAddrees/String remoteAddress,int port, InetAddress localAddress,int localPort):新增加的两个参数用于本机有多个ip时指定本地ip地址和端口。
当客户端和服务器端建立socket连接(即各自产生socket对象)后,客户端和服务器端就不用再区分了。Socket对象提供下面两个方法来获取输入流和输出流:
- InputStream getInputStream():返回Socket对象对应的输入流,让程序通过该输入流从Socket对象中取出数据。
- OutputStream getOutputStream():返回Socket对象对应的输出流,让程序通过该输出流从Socket对象中输出数据。
3.demo展示
Server.java
public class