socket编程
所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象
socket编程代码
一、概念及流程
提供两台计算机之间的通信,主要用于描述IP和端口
在java中
java.net 包为两种常用的网络协议提供支持:
- TCP:TCP 代表传输控制协议,允许两个应用程序间的可靠通信。TCP 通常在因特网协议上被使用,这被称为 TCP/IP。
- UDP: UDP 代表用户数据报协议,一个无连接的允许应用程序间数据包传输的协议。
以下步骤发生在两台电脑使用套接字建立TCP连接时:
- 服务器实例化一个 ServerSocket 对象,指示通信将产生在哪个端口号;
- 服务器调用 ServerSocket 类的 accept() 方法。这个方法等待直到一个客户端在给定的端口上连接到服务器;
- 在服务器等待后,一个客户端实例化一个 Socket 对象,指定服务器名称和连接的端口号;
- Socket 类的构造函数努力将客户端连接到指定的服务器和端口号。如果通信建立,客户端现在就拥有了一个能和服务器通信的 Socket 对象;
- 在服务器端,accept() 方法在服务器上返回一个连接到客户端套接字的新的套接字。
在连接建立后,通信可以使用 I/O 流产生。每个套接字都有一个输出流和一个输入流。客户端的输出流连接到服务器端的输入流,客户端的输入流连接到服务器端的输出流。
二、Socket基本操作
- 连接远程机器
- 发送、接受数据
- 关闭连接
- 绑定端口
- 监听入站信息
- 在绑定端口上接受来自远程机器的连接
前三个为socket常用方法,后三个为SeverSocket(服务端开启)常用方法
SeverSocket
服务器开启
构造方法-需要抛异常
常用方法
- public int getLocalPort()
返回此套接字监听的端口 - public Socket accept() throws IOException
监听并接受此套接字的连接 - public void setSoTimeout (int timeout)
通过指定超时值启用/禁用 SO_TIMEOUT(以ms为单位) - public void bind(SocketAddress host, int backlog)
将 ServerSocket 绑定到特定地址(IP 地址和端口号)
Socket
Socket是可以在两端使用,客户端获取一个Socket实例化对象,而服务器端通过accept方法获取一个Socket对象返回值。
构造方法
常用方法
- public InetAddress getInetAddress()
返回套接字连接的地址 - public SocketAddress getRemoteSocketAddress()
返回此套接字连接的端点地址(未连接返回 null) - public int getLocalPort()
返回此套接字绑定的本地端口 - public int getPort()
返回此套接字连接的远程端口 - public void connect(SocketAddress host, int timeout) throws IOException
将此套接字连接到服务器,并指定一个超时值 - public InputStream getInputStream() throws IOException
返回此套接字的输入流 - public OutputStream getOutputStream() throws IOException
返回此套接字的输出流 - public void close() throws IOException
关闭此套接字