Java-网络编程

一、什么是网络
由点和线构成,表示诸多对象间的相互联系。
二、计算机网络
为实现资源共享和信息传递,通常通信线路连接起来的若干主机(Host)
互联网:(Internet)点与点相连
万维网:(WWW – World Wide Web) 端与端相连
物联网:(IOT – Internet of things) 物与物相连
网络编程:让计算机与计算机之间建立连接、进行通信。
三、网络模型
1.OSI(Oper System Interconnection)开放式系统互联
在这里插入图片描述

物理层:解决信号
数据链路层:MAC全球唯一
网络层:IP地址
传输层:协议
会话层:建立连接,断点续传
表示层:数据加密
应用层:
2.TCP/IP模型
一组用于实现网络互联的通信协议,将协议分成四个层次。
在这里插入图片描述

3.TCP/UDP
	(1)TCP协议:Transmission Control Protocol传输控制协议

是一种面向连接的、可靠的、基于字节流的传输层通信协议。数据大小无限制。建立连接的过程需要三次握手,断开连接的过程需要四次挥手。
(2)UDP协议:User Datagram Protocol用户数据协议
是一种无连接的传输层协议,提供面向事物的简单不可靠信息传送服务,每个包的大小64KB
TCP UDP
是否连接 面向连接 面向非连接
传输可靠性 可靠 不可靠
速度 慢 快

4.IP

IP协议:Internet Protocol Address互联网协议地址/网际协议地址
分配给互联网设备的数字标签(唯一标识)
IP地址分为两种:
IPV4: 4字节32位整数,并分成4段8位的二进制数,每8位之间用圆点隔开,每8位整数可以装换为一个0~255的十进制整数。
格式:D.D.D.D 例如: 255.255.255.255
TPV6: 16字节128位整数,并分成8段十六进制数,每16位之间用圆点隔开,每16位整数可以装换为一个0~65535的十进制整数。
格式:X.X.X.X.X.X.X.X 例如: FFFF.FFFF.FFFF.FFFF.FFFF.FFFF.FFFF.FFFF
5.IPV4的应用分类
A类:政府机构,1.0.0.1 ~ 126.255.255.254
B类:中型企业,128.0.0.1 ~ 191.255.255.254
C类:个人用户,192.0.0.1 ~ 223.255.255.254
D类:同于组播,224.0.0.1 ~ 239.255.255.254
E类:用于实验,240.0.0.1 ~ 255.255.255.254
回环地址:127.0.0.1,指本机,一般用于测试使用
查看IP命令:ipconfig
测试IP命令:ping D:D:D:D
6.Port
端口号:在通信实体上进行网络通讯的程序的唯一标识
端口分类:
公认端口:0~1023
注册端口:1024~49151
动态或私有端口:49152~65535
常用端口:
MySql:3306
Oracle:1521
Tomcat:8080
SMTP:25
Web服务器:80
FTP服务器:21
7.InetAddress类
概念:表示互联网协议(IP)地址对象,封装了与该IP地址相关的所有信息,并提供了获取信息的常用方法。
方法:
public static InetAddress getLocalHost() 获得本地主机地址对象
如果有安全管理器,则使用本地主机名和-1作为参数来调用其checkConnect方法,以查看是否允许该操作。如果不允许该操作,则返回表示回送地址的InetAddress
public static InetAddress getByName(String host) 根据主机名称获得地址对象
public static InetAddress[] getAllByName(String host)获得所有相关地址对象
public String getHostAddress()获得IP地址字符串
public String getHostName()获得IP地址主机名
在这里插入图片描述
8.基于TCP的网络编程
Socket编程:
Socket(套接字)是网络中的一个通信结点
分为客户端Socket与服务器ServerSocket
通信要求:IP地址+端口号

9.开发步骤

建立通信连接(会话):
创建ServerSocket,指定端口号
调用accept等待客户端接入
客户端请求服务器:
创建Socket,指定服务器IP+端口号
使用输出流,发送请求数据给服务器
使用输入流,接收响应数据到客户端(等待)
服务器相应客户端:
使用输入流,接收请求数据给服务器(等待)
使用输出流,发送响应数据给客户端

///服务器
1.定义MyServer端口号为7777,用于接收一个客户端的请求,读取传入的字符串并相应给客户端。
2.定义MyCient 访问MyServer,发送请求数据字符串,并在服务器给予响应之后接收字符串。

main() throws IOException{//服务器
//定位服务器
ServertSocket  server = new ServerSocket(7777);
//接入客户端
Socket curentClient = server.accept();//
//读数据(接收请求)
BufferedReader request = new BufferedReader(new InputStreamReader(currentClient.getInputStream(), “UTF-8));
//数据处理
String s = request.readLine();
s = s.toUpperCase();//转换成大写
//写数据(返回相应)
PrintWriter response = new PrintWriter(new OutputStreamWriter(currentClient.getOutputStream(), “UTF-8));
response.println(s);
response.flush();
//关闭该客户端的请求
currentClient.close();	}
///客户端/
main() throws IOException{//客户端
Socket client = new Socket(“localhost”,7777);
//写数据(发送请求)
PrintWriter request = new PrintWriter(new OutputStreamWriter(client.getOutputStream(), “UTF-8));}
///client.getOutputStream()拿到的流
request.println(“HelloWorld”);
request.flush();//清空,提交
//读数据(接收响应)
BufferedReader response = new BufferedReader(new InputStreamReader(client.getInputStream(), “UTF-8));
String s= response.readLine();
//处理数据
System.out.println(s);
clint.close();}

10.总结

计算机网络:
为实现资源共享和信息传递,通过通信线路连接起来的若干主机
TCP协议:
是一种面向连接的、可靠的、基于字节流的传输层通信协议。数据大小无限制
IP
分配给互联网设备的数字标签(唯一标识)。
Port
在通信实体上进行网络通讯的程序的唯一标识
Socket编程
建立连接、接收请求、发送响应。

1.建立服务器端
2.建立客户端

注册业务(客户端)
1.客户端收集参数(input.next())
2.组织成一个完整的字符串(重要 制定协议是相同的道理)
3.将包含了用户所有信息的字符串,发送给服务器
4.(等待)服务器的响应注册结果

注册业务(服务器)
1.接收客户端法发来的用户信息字符串(重要考虑解析)
2.保存文件中(重要)
3.响应客户端一个操作(注册成功)

登录业务(客户端)
1.收集参数(用户名和密码)
2.组织成一个字符串发送给服务器
3.等待登录结果

登录业务(服务器)
1.接收客户端发来的登录信息(用户名和密码)
2.读取文件中的用户信息,并与客户端发来的信息进行比较(重要)
3.比较成功与否,决定了响应的操作结果(成功、失败)

//服务器端
public class Serer{
public static void main(String[] args){
try{
ServerSocket server = new ServerSocket(8888);
//接入客户端
Socket client = server.accept();
//获得请求对象
BufferedReader request = new BufferedReader(new InputStreamReader(client.getInputStream(), “UTF-8”));

//接收客户端请求数据
String uesrInfo = request.readLine();
//保存用户信息
String result = saveUserInfo(userInfo);
//获得响应对象
PrintWriter response = new PrintWriter(new OutputSreamWriter(client.getOutputStream(), “UTF-8”));

//将操作结果响应给客户端
response.println(result);
response.flush();

}catch(IOException e){
e.printStackTrace();
}
}
//将用户的数据保存在服务器的文件中
public static String saveUserInfo(String userInfo){

try{

//创建流,执行一个properties文件
PrintWriter out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(“informations\userInfo.properties”,true), “UTF-8”));

//解析出id的值作为“=”前的key、之家将userInfo代表的字符串作为“=”后的value
String id = getId(userInfo);

//保存用户信息到文件中
Properties prop = new Properties(); //Map集合适用于操作字符串
prop.setProperty(id , userInfo);//将数据存入Map集合
prop.store(out , “”);//存储—给一个流即键值对存入的位置 + 注释
System.out.println(“保存完毕”);

}catch(Exceprion e){
e.prinStackTrace();
}
return “RegisterSuccessful”;//返回注册成功
}
//解析出id的值
public static String getId(){
int statrtIndex = userInfo.indexOf(“:”)+1; //第一个冒号 +1
int endIndex =userInfo.indexOf(“,”); //第一个逗号结束
return userInfo.substring(statrtIndex,endIndex);
}
}

//客户端//
//用以完成注册和登录功能
public class Client{
private static final Scanner input = new Scanner(System.in);
public staic void main(String[] args){
try{
client = new Socket(“10.9.21.217”,8888);
//采集用户信息(整理完毕的用户信息字符串)
String userInfo = registMenu();
//获得请求对象
PrintWriter out = new PrintWriter(new OutputSreamWriter(client.getOutputStream(), “UTF-8”));
//向服务器发送请求数据
request.println(userInfo);
request.flush();

//获得响应对象
BufferedReader response = new BufferedReader(new InputStreamReader(client.getInputStream(), “UTF-8”));
//接收服务器的响应结果
String result = response.readLine();
//客户端本地打印操作结果
System.out.println(result);
}catch(Exception e){
e.printAtrackTrace();
}finally{
try{
client.close();
}catch(IOException e){
e.printStrackTrace();
}
}
}
//收集用户信息
public static String registMenu(){
System.out.print(“请输入学号:”);
String id = input.next();

System.out.print(“请输入密码:”);

String pwd = input.next()

System.out.print(“请输入姓名:”);

String name = input.next();

System.out.print(“请输入性别:”);

String sex = input.next();

System.out.print(“请输入年龄:”);

String age = input.nextInt();

System.out.print(“请输入成绩:”);
Double score = input.nextDouble();

//返回整理后的字符串(约定-- > 协议)
renturn toJSON(id,pwd,name,sex,age,score);
}

//将零散数据整合成一个有格式的字符串
public static Stirng toJSON(String id , String pwd,
String name,String sex,Integer age,Double score){
String json = “{id: “+id+”.pwd: “+pwd+”,name: “+name+”,sex: “+sex+”,age: “+age+”, score: “+acore+”}”
return null;}
}
Test{
main(){
Properties prop = new Properties();
InputStream is = new FileInputStream(“informations\userInfo.properties”);
prop.load(is);
for(Onjetc obj : prop.entrySet()){
System.out.println(obj.toString);}}}

Day42 网络编程

  1. IP地址
    1)IP地址(Internet Protocol):唯一标识网络上的每一台计算机
    2)IP地址的组成:32位,由4个8位二进制数组成
    3)IP地址 = 网络地址 +主机地址
    网络地址:标识计算机或网络设备所在的网段
    主机地址:标识特定主机或网络设备

  2. IP地址的分类
    分类 8位 24位 前8位取值范围
    A类 网络 主机 主机 主机 1~126
    B类 网络 网络 主机 主机 128~191
    C类 网络 网络 网络 主机 192~223
    D类 用于组播通信 224~239
    E类 用于科研 240~255

  3. IP地址的配置和检测,查看IP地址,检测网络是否畅通
    ① 查看本机的IP地址:ipconfig
    ② 测试网络是否通畅:ping,目标IP地址

  4. DNS(Domain Name System)域名解析。网址解析为IP地址

  5. 网络服务器:通常指在网络环境下,具有较高计算能力,能够提供用户服务功能的计算机

  6. 网络通信协议:为了在网络中不同的计算机之间进行通信而建立的规则、标准或约定的集合。
    层 网络通信协议
    应用层 HTTP FTP TFTP SMTP SNMP DNS
    传输层 TCP UDP
    网络层 ICMP IGMP IP ARP RARP
    数据链路层 由底层网络定义的协议
    物理层

  7. java.net包

  1. Socket(如物流送快递时的快递点)
    2)ServerSocket
    1)DatagramPacket
    2)DatagramSocket
    3)InetAddress
  1. Socket通信模型:进行网络通信时,Socket需要借助数据流来完成数据的传递工作。
  2. 基于TCP协议的Socket网络通信:用来实现双向安全连接网络通信。Socket网络编程的步骤(网络编程模型:客户端/服务端(C/S))
    建立连接→打开Socket关联的输入输出流→数据流中读写信息→关闭所有的数据流和Socket。(客户端发送信息给服务器端)
    例:
    服务器://创建一个TCP服务器,端口号是8800,用于接收用户的信息
    ServerSocket ss=new ServerSocket(8800);
    //使用服务器接收方法来接收请求,返回的就是一个socket
    Socket socket=ss.accept();
    InputStream is=socket.getInputStream();//输入读取字节流
    //创建字符流对象,需要InputStreamReader(这里写入is对象)
    BufferedReader br=new BufferedReader(new InputStreamReader(is));
    String info;
    while((info=br.readLine())!=null) {
    System.out.println(“客户端发送的信息是”+info);
    }
    客户端://表示给本机、端口号为8800的地址发送信息
    Socket socket=new Socket(“localhost”, 8800);
    String info=“服务器你好!”; //给服务器发送的信息
    //通过socket对象获取到输出流
    OutputStream os=socket.getOutputStream();
    os.write(info.getBytes()); //将信息发送给服务器
  3. Socket中实现对象的传递(传递对象信息),对象需要序列化
    ObjectOutputStream oos = new ObjectOutputStream(…);
    oos.writeObject(…);
    ObjectInputStream ois = new ObjectInputStream(…);
    Object = ois.readObject();(客户端发送对象给服务器端)
    例:
    服务器:ServerSocket ss=new ServerSocket(8801);
    Socket socket=ss.accept();
    InputStream is=socket.getInputStream();
    ObjectInputStream ois=new ObjectInputStream(is);
    Stu stu=(Stu) ois.readObject();
    System.out.println(stu.getName()+stu.getAge());
    客户端:Socket socket=new Socket(“localhost”,8801);
    Stu stu=new Stu(“赵四”, 22);
    OutputStream os=socket.getOutputStream(0);
    ObjectOutputStream oos=new ObjectOutputStream(os);
    oos.writeObject(stu);
  4. 多线程处理多请求
    1)采用多线程的方式
    2)一个专门负责监听的应用主服务程序
    3)一个专门负责处理请求的线程程序。(多客户端用户登录)
    例:
    服务器:ServerSocket ss=new ServerSocket(8802);
    while(true) { //客户端有多个,服务器只有一个,服务器一直处于开启状态
    Socket socket=ss.accept();
    LoginThread lt=new LoginThread(socket);
    new Thread(lt).start();
    }
    客户端:Socket socket=new Socket(“localhost”,8802);
    Stu stu=new Stu(“赵四”, “6666”);
    OutputStream os=socket.getOutputStream();
    ObjectOutputStream oos=new ObjectOutputStream(os);
    oos.writeObject(stu);
    oos.flush();
    线程: InputStream is= socket.getInputStream();
    ObjectInputStream ois=new ObjectInputStream(is);
    Stu stu=(Stu) ois.readObject();
    System.out.println(“服务器获取到客户端发送的信息”+stu);
  5. TCP和UDP的区别
    1)TCP:Transmission Control Protocol
    UDP:User Datagram Protocol, Datagram 报文
    2)TCP是面向连接的、安全的、可靠的、基于字节流的传输协议,效率低
    UDP时非面向连接的、不可靠的、不安全的、基于字节流传输协议,效率高
    TCP UDP
    是否连接 面向连接 面向非连接
    传输可靠性 可靠 不可靠
    速度 慢 快
  6. 基于UDP协议的Socket编程步骤步骤:
    1)利用 DatagramPacket 对象封装数据包
    2)利用 DatagramSocket 发送数据包
    3)利用 DatagramSocket 接收数据包
    4)利用 DatagramPacket 处理数据包
    例:
    服务器:DatagramSocket ds=new DatagramSocket(8899);
    //因为目前的数据传输是非面向连接的,所以数据需要打包接收
    byte[] datas=new byte[1024];
    DatagramPacket dp = new DatagramPacket(datas, datas.length);
    ds.receive(dp);
    System.out.println(“接收到的数据是”+new String(dp.getData() , 0, dp.getData().length));
    客户端:DatagramSocket ds = new DatagramSocket();
    String info=“服务器,你好”;
    byte [] datas=info.getBytes();
    InetAddress address=InetAddress.getByName(“localhost”);
    DatagramPacket dp=new DatagramPacket(datas , datas.length ,
    address , 8899);
    ds.send(dp);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值