Socket

////////////2016-11-21 ~ 2016-11-22///////////

int study_data(){

Socket简介:

在客户/服务器通信模式中, 客户端需要主动创建与服务器连接的 Socket(套接字), 服务器端收到了客户端的连接请求, 也会创建与客户连接的 Socket. Socket可看做是通信连接两端的收发器, 服务器与客户端都通过 Socket 来收发数据.

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。

建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口

Socket的8个核心类:

Socket(网络通信的通道,要建立Socket才能通信),

InputStream(从Socket中读取数据),

OutputStream(从Socket中写入数据),

InputStreamReader,OutputStreamWriter,BufferedReader,BufferedWriter

Server:ServerSocket(负责启动服务器接受Client连接)

Socket:

构造函数:

Socket()

Socket(InetAddress address, int port)throws UnknownHostException, IOException

Socket(InetAddress address, int port, InetAddress localAddress, int localPort)throws IOException

Socket(String host, int port)throwsUnknownHostException,IOException

Socket(String host, int port, InetAddress localAddress, int localPort)throws IOException

除去第一种不带参数的之外,其它构造函数会尝试建立与服务器的连接。如果失败会抛出IOException错误。如果成功,则创建Socket对象。Socket(String host, int port, InetAddress localAddress, int localPort)构造函数的参数分别为目标IP、目标端口、绑定本地IP、绑定本地端口。

Socket方法:

getInetAddress()                    //获得远程服务端的IP地址

getPort()                                //获得远程服务端的端口

getLocalAddress()                //获得本地客户端的IP地址

getLocalPort()                      //获得本地客户端的端口

getInputStream()                  //获得输入流

getOutStream()                   //获得输出流

Socket状态:

isClosed()                            //检测连接是否已关闭,若关闭,返回true;否则返回false

isConnect()                         //如果曾经连接过,返回true;否则返回false

isBound()                            //如果Socket已经与本地一个端口绑定,返回true;否则返回false

ServerSocket:

构造函数:

ServerSocket() throws IOException

ServerSocket(int port) throws IOException

ServerSocket(int port, int backlog) throws IOException

ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException

注意点:

1. port:服务端要监听的端口;

    backlog:客户端连接请求的队列长度;

    bindAddr:服务端绑定IP

2. 如果端口被占用或者没有权限使用某些端口会抛出BindException错误。譬如1~1023的端口需要管理员才拥有权限绑定。

3. 如果设置端口为0,则系统会自动为其分配一个端口;

4.bindAddr用于绑定服务器IP,为什么会有这样的设置呢,譬如有些机器有多个网卡。

5. ServerSocket一旦绑定了监听端口,就无法更改。ServerSocket()可以实现在绑定端口前设置其他的参数。

accept()函数:

若TCP客户端向TCP服务器发送了一个连接请求。TCP服务器监听到这个请求之后,就会调用accept()函数去接收请求,之后就可以开始I/O操作。

你可能感兴趣的:(Socket)