1.网络
查看本机ip地址
2.Socket
2.1 概述
也叫套接字编程,是一个抽象层
应用程序可以通过它发送或接收数据,可对其像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口与协议的组合
Socket就是为网络编程提供的一种机制 / 通信的两端都有Socket
网络通信其实就是Socket间的通信 / 数据在两个Socket间通过IO传输
3 服务器端-ServerSocket
在服务器端,选择一个端口号,在指定端口上等待客户端发起连接
启动服务:ServerSocket ss = new ServerSocket(端口);
等待客户端发起连接,并建立连接通道:Sokcet socket = ss.accept();
4.客户端-Socket
新建Socket对象,连接指定ip的服务器的指定端口
Socket s = new Socket(ip, port);
从Socket获取双向的流
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();
5.入门案例
服务器端接收客户端发来的hello,并给客户端响应hello
5.1 服务器端
说明其中,server端的accept()是阻塞的,客户端不连接,服务器不执行后面流程
in.read()也是阻塞的,读不到就死等
package cn.tedu.socket;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
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();//断开连接
socket.close();//释放端口
}
}
5.2 客户端
package cn.tedu.socket;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws 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();
}
}