网络编程

一.网络编程基础

 1.按照地域分为:广域网 城域网 局域网。

2.网络参考模型:七层 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层

TCP/IP参考模型 1.链路层(物理层和数据链路层)2.网络层 3.传输层 4.应用层(应用层 表示层 会话层)。

3.通信协议分为  网络层IP协议 IPV4和IPV6,互联网协议

                          传输层协议:TCP(三次握手四次断开)和UDP(提供面向事务的简单不可靠信息传送服务大小为64kb)

                          应用层协议:HTTP, FTP SMTP POP3

二.计算机之间通信

1.ip地址是数字型的,32位整数通常分为四个八位的二进制数,每八位用 . 隔开。

IPV4地址分类(127.0.0.1本机)

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

2.端口:发送和接受数据都需要通过端口进出计算机,用于唯一标识通信实体上进行网络通讯的程序。

三.相关类的使用

1.InetAddress:获取ip地址,对ip地址抽取和封装

public class Demo1 {
    public static void main(String[] args) {
        InetAddress id=null;
        try {
            id=InetAddress.getLocalHost();
            String str=id.gethostname();
            System.out.println(id);
            System.out.println(str);
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}

根据主机名确定主机ip地址:InetAddress id=InetAdress.getByName(192.168.133.1); System.out.println(id);

ip地址也可以换成网站名字,也可以获取id;

2.URLEncode类和URLDecode类:用于完成普通字符串和application/www.cccz.com等字符的转换。

//URLDecoder:解码,将特殊中文字符串转换为普通字符串
		String string1 = URLDecoder.decode("%E5%8D%83%E9%94%8B", "utf-8");
                System.out.println(String1);
//URLEncoder:编码,将普通字符串转换为特殊字符串
		String string2 = URLEncoder.encode("Java的开发指南", "GBK");
		System.out.println(string2);

 四.基于TCP的网络编程

 1.TCP传输控制协议,基于字节流的传输层通信协议。(1)安全可靠(2)面向对象(3)大小受限制但是连接以后数据随意传了。(4)效率低。  三次握手:a.客户端向服务器发送一个请求 b.服务端收到请求后回客户端一个响应 c.客户端收到响应后回服务器一个确认信息。

五.Socket和ServerSocket

//客户端

import java.io.BufferedWriter;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class Demo2 {
    public static void main(String[] args) throws Exception{
        Socket socket=new Socket("192.168.133.1", 9808);
        OutputStream os=socket.getOutputStream();
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os));
        bw.write("周董真胖");
        bw.flush();
        bw.close();
        socket.close();

    }
}
//服务器端 先开启服务器端,在开客户端
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Demo3 {
    public static void main(String[] args) throws Exception{
        ServerSocket listener=new ServerSocket(9808);
        System.out.println("服务器开了");
        Socket socket=listener.accept();
        InputStream is=socket.getInputStream();
        BufferedReader br=new BufferedReader(new InputStreamReader(is));
        String data=br.readLine();
        System.out.println("客户端说的是"+data);
        br.close();
        socket.close();
        listener.close();
    }
}

 2.客户端发送消息,服务端回复消息

建立一个鱼服务器之间的连接,socket首先赋值为空.写端口号或者ip地址, outputstream,os.write写上要说的话。刷新

再在客户端写上接受信息的inputstream (记得用try catch盖住错误) close结束

  服务端,先接受的socket变为空,接受客户端发来的消息,读取数据,打印出来,然后使用outputstream回复消息,刷新,也需要用try catch盖住 最后close。

3.上传文件:BufferedInputStream input = new BufferedInputStream(new FileInputStream(new File("file/client/image.png")));

换成文件输入流

4.多个客户和一个服务段通信:1.构建客户端对象,null  2.输出 3.控制台获取数据 Scanner scanner=new Scanner(system.in);

   4.进行循环的发送和接受消息  然后发送 再接受消息 最后跳出接受消息。5.释放资源 clinet.close();

System.out.println("客户端对服务端说:");
String message = scanner.nextLine();
//发送
output.write(message.getBytes());
output.flush();
//接受消息
byte[] arr = new byte[1024];
int len = input.read(arr);
String reply = new String(arr, 0, len);
System.out.println("收到服务端的反馈:" + reply);
//跳出接受结构
if(reply.equals("886") || reply.equals("bye") ||reply.equals("再见")){
break;
}

构建服务段:1.创建服务段对象 null  2.通过循环为不同的客户端进行服务,循环体内,创建线程  socket.client=server.accept();

ServerThread thread = new ServerThread(client);
                thread.start();    

3.线程的执行体里面,进行发送消息和接受消息的操作 serverthread 继承Thread 重写run方法 

4.从控制台获取消息,再加上回复的消息,约定一个结束语句。

TCP实现注册登录:跟单例很相似。

六.UDP编程

1.User Datagram Protocol 用户数据包协议,提供面向事务的简单不可靠信息传送服务。

2.特点: a不安全 b无连接  c效率高 d有大小限制,数据包必须限定在64kb之内

3.DatagramSocket 数据报套接字,表示用来发送和接受数据报包的套接字

  DatagramPachet 表示数据报包,每个包最大64kb

4.接收方byte[] arr = new byte[1024];
            DatagramPacket packet = new DatagramPacket(arr, arr.length);

 

TCP的Socket与UDF:

ServerSocket 服务器套接字 写服务端的步骤:

1.创建服务器套接字 ServerSocket listener=new ServerSocket(6666);

2.侦听 listener.accept()

3.获取输入或者输出流;

4.处理数据

5.关闭流

客户端步骤:

1.创建socket 客户端套接字,指定服务端的ip和端口号,自动连接

2.获取输入或者输出流

3.处理数据

4.关闭流。

       UDP:

              1.DatagramSocket:相当于快递点给包装好

              2.DatagramPacket:包裹,传送数据包

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值