////////////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操作。
}