Socket简介
Socket通信
TCP协议是面向连接的、可靠的、有序的、面向字节流的方式发送数据
基于TCP协议实现网络通信的类
- 客户端的Socket类
- 服务器端的ServerSocket类
Socket通信模型
Socket通信实现步骤
- 创建ServerSocket和Socket
- 打开连接到Socket的输入/输出流
- 按照协议对Socket进行读/写操作
- 关闭输入输出流、关闭Socket
服务器端
- 创建ServerSocket对象,绑定监听端口
- 通过accept()方法监听客户端请求
- 连接建立后,通过输入流读取客户端发送的请求信息
- 通过输出流向客户端发送响应信息
- 关闭相关资源
public class Server{
public static void main(String[] args){
try{
//1.创建一个ServerSocket,指定绑定的端口,并监听此端口
ServerSocket ss = new ServerSocket(8888);
//2.调用accept()开始监听,等待客户端连接
Socket socket = ss.accept();
//3.获取输入流,读取客户端信息
InputStream is = socket.getInputStream();
//4.提升性能,放入字符流中
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String info = null;
while((info=br.readLine()) != null){
System.out.println("我是服务器,客户端说:"+info);
}
//5.关闭相关资源
socket.shutdownInput();
br.close();
isr.close();
is.close();
socket.close();
ss.close();
}
}
}
客户端
- 创建Socket对象,指明需要连接的服务器地址和端口号
- 建立连接后,用输出流向服务器发送请求信息
- 通过输入流读入服务器的响应信息
- 关闭相关资源
public class Client{
public static void main(String[] args){
//1.创建Socket,指定地址和端口
Socket socket = new Socket("127.0.0.1",8888);
//2.获取输出流,向服务器发送信息
OutputStream os = socket.getOutputStream();
//将输出流包装为字符流
PrintWriter pw = new PrintWriter(os);
pw.write("用户名:123;密码:abc");
pw.flush();
//关闭输出流
socket.shutdownOutput();
pw.close();
os.close();
socket.close();
}catch(UnknowHostException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
先启动服务器,再启动客户端