1.概述: 也叫套接字编程,是一个抽象层。 应用程序可以通过它发送或接收数据,可对其像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口与协议的组合。
Socket就是为网络编程提供的一种机制 / 通信的两端都有Socket
网络通信其实就是Socket间的通信 / 数据在两个Socket间通过IO传输 服务器端-ServerSocket: 在服务器端,选择一个端口号,在指定端口上等待客户端发起连接。
启动服务:ServerSocket ss = new ServerSocket(端口); 等待客户端发起连接,并建立连接通道:Sokcet socket = ss.accept();
4.4 客户端-Socket
这里是引用新建Socket对象,连接指定ip的服务器的指定端口 Socket s = new Socket(ip, port); 从Socket获取双向的流 InputStream in = s.getInputStream(); OutputStream out = s.getOutputStream();
例: 服务器端接收客户端发来的hello,并给客户端响应hello。
服务器端 说明其中,server端的accept()是阻塞的,客户端不连接,服务器不执行后面流程。in.read()也是阻塞的,读不到就死等。
public static void main(String[] args) throws Exception { //1,在指定端口启动服务 ServerSocket server = new ServerSocket(8000); //2,等待客户端发起连接,并建立通道 Socket socket = server.accept(); //3,取出双向的流 InputStream in = socket.getInputStream(); OutputStream out = socket.getOutputStream(); //4,通信 /* * 通信协议: * 1,通信流程 * 2,数据格式 * 先接收hello,在发送world */ //接收客户端发来的hello for(int i = 0 ; i < 5 ;i++) { //一个一个字节从网络流中读取客户端发来的数据 char c = (char) in.read(); System.out.print(c);//一行展示收到的数据 } //给客户端发送数据 out.write("world".getBytes()); out.flush();//刷出内存缓存 //释放资源 socket.close();//断开连接 server.close();//释放端口 }客户端
public static void main(String[] args) throws Exception, IOException { //1,与服务器建立连接 //同桌启动服务器,你当客户端发送 Socket s = new Socket("127.0.0.1",8000); //2,取出双向的流 InputStream in = s.getInputStream(); OutputStream out = s.getOutputStream(); //3,通信 /* * 先发送Hello,再接收world */ //给服务器发送数据 out.write("hello".getBytes()); out.flush(); //接收服务器响应的数据 for (int i = 0; i < 5 ; i++) { char c = (char) in.read(); System.out.print(c);//同一行展示 } //释放资源 s.close(); }