好久没有写代码写的这么开心了,哈哈,还有相关的ppt存在网盘里
TCP模型
物理层---数据链路层---网络层---传输层---应用层,Socket作用在网络层
Socket通信
TCP协议是面向连接,可靠的,有序的,以字节流的方式发送数据
下面是基于TCP协议实现网络通信:用到Socket类和ServerSocket类
Socket通信模型
Socket通信实现步骤
1、创建ServerSocket和Socket
2、打开连接到Socket的输入和输出流
3、安装协议对socket进行读写操作
4、关闭输入输出流,对Socket进行读写操作
从客户端到服务器端实现网络通信
下面是客户端和服务器端互相通信的代码实现(注意先运行服务器端):
1、服务器:
public class Server {
public static void main(String[] args) {
try {
//创建服务器 socket,ServerSocket,指定绑定的端口,并监听
System.out.println("======我是服务器:");
ServerSocket serverSocket = new ServerSocket(8080);
System.out.println("======服务器即将启动,等待客户端的连接:");
//通过accept()方法监听,等待客户端的连接
Socket socket = serverSocket.accept();
//获取输入流,读取客户端信息
InputStream is = socket.getInputStream();
//将字节流转换为字符流
InputStreamReader isr = new InputStreamReader(is);
//为字符流添加缓冲
BufferReader br = new BufferedReader(isr);
String info = null;
while ((info = br.readLine) != null) {
System.out.println(" 客户端对我说:" + info);
}
//关闭输入流
socket.shutdownInput();
//获取输出流
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.write("登录成功,欢迎好奇宝宝~");
pw.flush();
//关闭资源
br.close();
isr.close();
is.close();
os.close();
pw.close();
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2、客户端:
public class Client {
public static void main(String[] args) {
try {
System.out.println("=====我是客户端:")
//创建 Socket 对象,指定服务器端的 IP 和端口号
Socket socket = new Socket("localhost", 8080);
//获取字节输出流
OutputStream os = socket.getOutputStream();
//将输出流包装成打印流
PrintWrite pw = new PrintWrite(os);
pw.write("用户名: gsn,密码:123");
//刷新一下缓冲区,强制将缓冲区的数据推送到显示设备上
pw.flush();
socket.shutdownOutput();
//获取自己输入流
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReder(is);
BufferedReader br = new BufferedReader(isr);
String info = null;
while((info = br.readLine()) != null) {
System.out.println("服务器对我说:" + info);
}
//关闭资源
br.close();
isr.close();
is.close();
os.close();
pw.close();
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
代码演示结果:
服务器端:
客户端: