zoukankan      html  css  js  c++  java
  • 网络编程

    网络编程

    2020/9/3 16:33:15


    网络编程的常识

      目前主流网络通讯软件有:微信、QQ、陌陌、探探、飞信、阿里旺旺、...
      在吗?
    
    七层网络模型
       为了保证数据安全有效的传递,ISO(国际标准委员会组织)将数据的传递从逻辑上划分为以下七层:
        应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
        当发送数据时,按照上述七层协议从前向后一层层进行加包处理再发送;
        当接收数据时,按照上述七层协议从后向前一层层进行拆包处理再显示;
    
    IP地址
    如:
       192.168.1.1  - 是绝大多数路由器的默认登录地址,设置账号和密码及Mac地址过滤
    
       IP地址 - 是互联网中的唯一地址标识,根据IP地址可以定位到具体某一台设备。
       IP地址本质上是由32位二进制组成的整数,叫做IPv4,当然也有128位二进制组成的整数,叫做IPv6,目前的主流还是IPv4。
       日常生活中采用点分十进制表示法进行IP地址的描述,也就是将每个字节的二进制整数转换为一个十进制整数,不同的十进制整数之间采用小数点隔开。
    如:
       0x01020304 => 1.2.3.4
    
    端口号
       端口号 - 是设备中具体进程的标识,也就是根据端口号可以定位到具体某个进程。
       网络编程提供:IP地址 + 端口号。
       端口号本质上是由16位二进制组成的整体,表示范围是:0 ~ 65535,其中0 ~ 1024之间的端口号通常被系统占用,因此编程从1025开始使用。
    

    基于tcp协议的编程模型

    编程模型
    	服务器:
    	   (1)创建ServerSocket类型的对象并提供端口号;
    	   (2)等待客户端的连接请求,调用accept方法;
    	   (3)使用输入输出流通信;
    	   (4)关闭Socket;
    package cn.itxdl.day19;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.PrintStream;
    import java.net.InetAddress;
    import java.net.Socket;
    
    public class ServerThread extends Thread {
    	private Socket s;
    	
    	public ServerThread(Socket s) {
    		this.s = s;
    	}
    	
    	@Override
    	public void run() {
    		try {
    			// 3.使用输入输出流进行通信
    			BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
    			PrintStream ps = new PrintStream(s.getOutputStream());
    			while (true) {
    				// 接收客户端发来的字符串内容,BufferedReader类
    				String msg = br.readLine();
    				//System.out.println("服务器接收到的数据内容是:" + msg);
    				InetAddress ia = s.getInetAddress();
    				System.out.println("客户端" + ia + "发来的数据内容是:" + msg);
    				// 判断服务器接收到的消息是否为"bye",若是则聊天结束
    				if ("bye".equalsIgnoreCase(msg)) {
    					System.out.println("客户端" + ia + "已下线!");
    					break;
    				}
    				// 实现服务器向客户端回发消息
    				ps.println("I received!");
    				//System.out.println("服务器发送数据成功!");
    			}
    	
    			// 4.关闭Socket
    			ps.close();
    			br.close();
    			s.close();
    		} catch(Exception e) {
    			e.printStackTrace();
    		}
    	}
    }
    

    	客户端:
    	   (1)创建Socket类型的对象并提供服务器的IP地址和端口号;
    	   (2)使用输入输出流通信;
    	   (3)关闭Socket;  
    package cn.itxdl.day19;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.PrintStream;
    import java.net.Socket;
    import java.util.Scanner;
    
    public class ClientStringTest {
    
    	public static void main(String[] args) {
    		
    		try {
    			// 1.创建Socket类型的对象并提供服务器的IP地址和端口号
    			Socket s = new Socket("XDL-20170621QCO", 8888);
    			System.out.println("连接服务器成功!");
    			
    			// 2.使用输入输出流进行通信
    			Scanner sc = new Scanner(System.in);
    			PrintStream ps = new PrintStream(s.getOutputStream());
    			BufferedReader br = new BufferedReader(
    					new InputStreamReader(s.getInputStream()));
    
    			while(true) {
    				System.out.println("请输入要发送的内容:");
    				String str = sc.next();
    				// 实现客户端向服务器发送字符串内容"在吗?"
    				//Thread.sleep(20000);
    				//ps.println("在吗?");
    				ps.println(str);
    				System.out.println("客户端发送数据成功!");
    				// 对客户端向服务器发送的内容进行判断,若是"bye"则聊天结束
    				if("bye".equalsIgnoreCase(str)) {
    					System.out.println("聊天结束!");
    					break;
    				}
    				// 实现客户端接收服务器回发的消息
    				String msg = br.readLine();
    				//System.out.println("客户端接收到的数据内容是:" + msg);
    			}
    			
    			// 3.关闭Socket
    			br.close();
    			ps.close();
    			sc.close();
    			s.close();
    		} catch(Exception e) {
    			e.printStackTrace();
    		}
    
    	}
    
    }
    

    package cn.itxdl.day19;
    
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class ServerStringTest {
    
    	public static void main(String[] args) {
    		
    		try {
    			// 1.构造ServerSocket类型的对象并提供端口号
    			ServerSocket ss = new ServerSocket(8888);
    			// 2.等待客户端的连接请求,调用accept方法
    			while(true) {
    				System.out.println("等待客户端的连接请求...");
    				Socket s = ss.accept();
    				System.out.println("客户端" + s.getInetAddress() 
    					+"连接成功!");
    				// 只要有客户端连接成功,就启动一个新线程为之服务
    				new ServerThread(s).start();
    			}		
    			//ss.close();
    		} catch(Exception e) {
    			e.printStackTrace();
    		}
    	}
    
    }
  • 相关阅读:
    'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
    Tensorflow滑动平均模型解析
    [TFRecord格式数据]利用TFRecords存储与读取带标签的图片
    [TFRecord文件格式]基本介绍
    tensorflow Image 解码函数
    Tensorflow ActiveFunction激活函数解析
    tensorflow.python.framework.errors_impl.OutOfRangeError: FIFOQueue
    tf.train.shuffle_batch函数解析
    sparse_softmax_cross_entropy_with_logits
    softmax_cross_entropy_with_logits
  • 原文地址:https://www.cnblogs.com/lzy1212/p/13608587.html
Copyright © 2011-2022 走看看