主页 > 互联网  > 

2025.3.1学习内容----网络编程

2025.3.1学习内容----网络编程
2025.3.2学习内容 网络编程

一 计算机网络基础知识 1.1 IP地址

IP:唯一标识网络上的每一台计算机

IP组成:32位,由4个8位二进制数组成

二进制不方便记忆,转变为十进制进行使用的

192.168.1.200

1.2 IP组成

IP共分为 A B C D E类

IP地址 = 网络地址 +主机地址

网络地址:标识计算机或网络设备所在的网段

主机地址:标识特定主机或网络设备

1.3 IP的配置及检测

查看IP地址,检测网络是否畅通

查看本机IP地址,win+r 输入cmd ,输入命令

ipconfig

去查询

测试网络是否通畅

ping 目标IP地址

DNS域名解析:DNS:Domain Name System,域名系统

将IP地址转换为域名

1.4网络服务器

二 Socket简介 2.1 什么是Socket?

Socket的底层机制复杂,Java平台提供了一些简单的API,可以更简单有效的使用Socket开发而无需了解底层机制

通信链路的端点就被称为“套接字”(英文名Socket)

是提供给应用程序的接口

2.2Socket编程

2.2.1Socket编程步骤

2.3 Socket编程代码示例 2.3.1 发送字符串

创建一个服务项目project_server,再创建一个客户端项目project_client

服务器端代码:

public static void main(String[] args) { //1、创建服务器的端点对象 try { ServerSocket serverSocket = new ServerSocket(5000); //2 、监听并接收客户端的socket请求 Socket socket = serverSocket.accept(); //客户端 //3、从socket中获取二进制输入流信息 InputStream is = socket.getInputStream(); //字节流 Reader reader = new InputStreamReader(is); BufferedReader br = new BufferedReader(reader); String line=null; while ((line=br.readLine())!=null){ System.out.println("客户端说:"+line); } //服务器端给客户端的反馈 OutputStream os = socket.getOutputStream();//输出流对象 Writer writer=new OutputStreamWriter(os); BufferedWriter bw=new BufferedWriter(writer); String str="用户名和密码正确,欢迎登录!"; bw.write(str); bw.flush(); bw.close(); writer.close(); os.close(); // br.close(); reader.close(); is.close(); socket.close(); serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } }

客户端代码:

public static void main(String[] args) { // 登录场景: //1、客户端的端点 try { Socket socket=new Socket("localhost",5000); //localhost代码本机 OutputStream os = socket.getOutputStream();//输出流对象 Writer writer=new OutputStreamWriter(os); BufferedWriter bw=new BufferedWriter(writer); String str="用户名:admin,密码:123456"; bw.write(str); bw.flush(); socket.shutdownOutput(); //停掉输出流 //原因: 客户端要接收服务端的流信息,需要暂时停掉输出流 //客户端接收 InputStream is = socket.getInputStream(); //字节流 Reader reader = new InputStreamReader(is); BufferedReader br = new BufferedReader(reader); String line=null; while ((line=br.readLine())!=null){ System.out.println("服务说:"+line); } br.close(); reader.close(); is.close(); // bw.close(); writer.close(); os.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } 2.3.2 发送对象

在客户端与服务器端都创建一个User对象,实现Serializable接口

import java.io.Serializable; public class User implements Serializable { private String userNo; private String userPwd; public User() { } public User(String userNo, String userPwd) { this.userNo = userNo; this.userPwd = userPwd; } public String getUserNo() { return userNo; } public void setUserNo(String userNo) { this.userNo = userNo; } public String getUserPwd() { return userPwd; } public void setUserPwd(String userPwd) { this.userPwd = userPwd; } }

客户端代码:

public static void main(String[] args) { try { Socket socket=new Socket("localhost",5001); OutputStream os = socket.getOutputStream(); ObjectOutputStream oos=new ObjectOutputStream(os); User u1=new User("15386880458","123"); oos.writeObject(u1); oos.flush(); oos.close(); os.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } }

服务器端代码:

public static void main(String[] args) { try { ServerSocket serverSocket=new ServerSocket(5001); Socket socket = serverSocket.accept(); InputStream is = socket.getInputStream(); ObjectInputStream ois=new ObjectInputStream(is); Object object = ois.readObject(); User user=(User)object; System.out.println("客户端发送的对象,账号是:"+user.getUserNo()+",密码是:"+user.getUserPwd()); ois.close(); is.close(); socket.close(); serverSocket.close(); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } 2.3.3 多线程接收多客户端请求

服务器端创建线程类:

import java.io.*; import java.net.InetAddress; import java.net.Socket; public class ClientThread extends Thread { private Socket socket; //声明一个Socket对象 public ClientThread(Socket socket) { this.socket = socket; } @Override public void run() { try { InetAddress address = socket.getInetAddress(); //此对象可以获取客户端的IP地址 String ip = address.getHostAddress(); //获取客户端的IP地址 InputStream is = socket.getInputStream(); Reader reader = new InputStreamReader(is); BufferedReader br = new BufferedReader(reader); String line = null; while ((line = br.readLine()) != null) { System.out.println(ip + "客户端:" + line); } br.close(); reader.close(); is.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } super.run(); } }

服务器端Main方法

public static void main(String[] args) { try { ServerSocket serverSocket=new ServerSocket(8081); while (true){ Socket socket = serverSocket.accept(); //创建一个线程:线程中包含的代码是从socket中读取流信息 ClientThread ct=new ClientThread(socket); //调用类的无参构造方法 ct.start(); } } catch (IOException e) { e.printStackTrace(); } }

客户端

public static void main(String[] args) { try { Socket socket=new Socket("localhost",8081); //localhost代码本机 OutputStream os = socket.getOutputStream();//输出流对象 Writer writer=new OutputStreamWriter(os); BufferedWriter bw=new BufferedWriter(writer); String str="你吃饭了吗?"; bw.write(str); bw.flush(); bw.close(); writer.close(); os.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } }
标签:

2025.3.1学习内容----网络编程由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“2025.3.1学习内容----网络编程