网络Socket
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();
}