一、概述
Socket也是一种数据源
Socket是网络通信的端点
Unix中的Socket
Unix系统中 一切都是文件。
因为Scoket是网络通信的端点,可以进行数据的输入输入,所以Socket也可以看成文件
文件描述符是已打开文件的索引
每个进程都会维护一个文件描述符表
通过Socket发送数据

1、创建socket
2、告诉驱动程序指定IP地址和端口号绑定到Scoket
3、消息发送到Socket
4、驱动程序收到Socket的精确定位数据
通过Socket接收数据

1、创建Socket
2、绑定IP、端口号
3、信息传输给Socket
4、读取数据
ServerSocker:服务器端在网络通信上的端点
Socket:客户端在网络通信上的端点
二、建立ServerSocket连接
连接过程如下:
- 服务器端先调用bind绑定端口
- 然后进入accept阻塞状态等待客户端连接
- 客户端连接客户端,传入主机地址和端口号
- accept接收成功返回客户端的socket
- 通过IO流进行信息传输
- 通过close关闭服务器端口
- 关闭服务器端口
简单代码实例如下:
服务器端:
package demo1.simple;import java.io.*;import java.net.ServerSocket;import java.net.Socket;public class Client {public static void main(String[] args) {final int DEFAULT_PORT = 9999;Socket socket = null;ServerSocket serverSocket = null;BufferedWriter writer = null;BufferedReader reader = null;try {serverSocket = new ServerSocket(DEFAULT_PORT);System.out.println("服务器[" + DEFAULT_PORT + "]开启,正在等待客户端链接");while (true) {socket = serverSocket.accept();System.out.println("客户端[" + socket.getPort() + "]已连接到服务器");reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));String str =null;while ((str =reader.readLine())!=null) {if ("quit".equalsIgnoreCase(str)) {System.out.println("客户端" + socket.getPort() + "已断开连接");break;}System.out.println("客户端[" + socket.getPort() + "]:" + str);writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));writer.write("服务器回复信息:" + str + "\n");writer.flush();}}} catch (IOException e) {e.printStackTrace();} finally {try {if (socket != null) {socket.close();}if (serverSocket != null) {System.out.println("服务器已经关闭");serverSocket.close();}if (writer != null) {writer.close();}if (reader != null) {reader.close();}} catch (IOException e) {e.printStackTrace();}}}}
客户端:
package demo1.simple;import java.io.*;import java.net.Socket;import java.net.UnknownHostException;public class Service {public static void main(String[] args) {final int DEFAULT_PORT=9999;final String DEFAULT_HOST="localhost";boolean flag=true;Socket socket=null;BufferedReader reader=null;BufferedWriter writer=null;try {socket=new Socket(DEFAULT_HOST,DEFAULT_PORT);System.out.println("客户端已开启");reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));String str=null;BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(System.in));while (flag) {str = bufferedReader.readLine();if ("quit".equalsIgnoreCase(str)) {flag=false;writer.write(str);writer.flush();break;}writer.write(str + "\n");writer.flush();System.out.println(reader.readLine());}}catch (IOException e) {e.printStackTrace();}finally {try {if (socket != null) {System.out.println("Service已关闭");socket.close();}if (writer != null) {writer.close();}if (reader != null) {reader.close();}} catch (IOException e) {e.printStackTrace();}}}}
代码实验结果:
客户端:
服务器端:
