技术理论-【socket】- 计算机网络

背景知识

  • 计算机网络

  • 互联网
    技术理论-【socket】- 计算机网络_第1张图片

  • IP

  • 端口
    技术理论-【socket】- 计算机网络_第2张图片

  • URL

  • B/S,C/S

  • 分层

    • ISO标准(物理,数据链路,网络,传输,会话,表示,应用)
    • TCP/IP协议集(网络接口,网络层、传输层、应用层)
  • 应用层:HTTP、FTP、DNS、SMTP、Telnet

  • 传输层:TCP、UDP

  • 数据包
    技术理论-【socket】- 计算机网络_第3张图片

知识点

  • HTTP
    • InetAddress
    • InetSocketAddress
    • URL
    • HttpURLConnection
  • TCP协议
    • ServerSocket
    • Socket
      技术理论-【socket】- 计算机网络_第4张图片
  • UDP协议
    • DatagramPacket
    • DatagramSocket
      技术理论-【socket】- 计算机网络_第5张图片

命题

  • 计算机网络是计算机之间建立的通信网络。
  • 通信网络是个体之间传递信息的网络,比如邮政网络、快递网络、手机网络。
  • 计算机信息是通过网络设备进行传输。
  • 计算机信息是二进制的数字信息。
  • 计算机在网络中需要用IP作为身份标识。
  • 计算机中有多个应用,端口是应用在网络中的标识。
  • 应用拥有多个资源,URI是应用资源的标识。
  • URI(统一资源标志符)分为URL(统一资源定位符)和URN(统一资源名称)。
  • 计算机网路分为局域网和互联网。
  • 局域网是封闭的私有网络,私有IP。
  • 互联网是开放的公共网络,共有IP。
  • 网络中传输的是数据包,类似于快递包裹。
  • 数据包传输过程需要底层网络设备支持,比如网线、集线器、路由器。
  • 数据传输必须保证数据的完整性,就要求网络可用性、高效性、稳定性,所以将传输过程通过分层进行解耦,分层来解决可用性、高效性、稳定性、完整性。
  • 网络使用的TCP/IP分层方案。
  • 应用开发者只关心传输层和应用层。
  • 传输层负责数据包的传递工作,类似于快递公司,只负责运输过程,不关心包裹内容。
  • 传输层的工具是socket,有TCP和UDP两种传输协议。
  • 应用层负责数据内容规范,类似于信件格式,不同信件,格式不同。
  • 互联网三大基石:HTTP、HTML、URL。
  • TCP传输是安全的,保证数据一定能传递成功,代价是占用资源多、性能低。
  • UDP传输是不安全的,只负责数据发送,不关心接收情况,优点是占用资源少,性能高,代价是可能丢包。

实际案例

  • 信息订阅
  • 点对点传输
  • 聊天室
  • 爬虫

代码案例

TCP-server


/**
 * TCP服务器端,接收和处理客户端信息
 * 1、创建服务器socket对象,ServerSocket,侦听1003端口
 * 2、侦听端口,
 * 3、准备输入和输出对象
 * 4、输入对象读取客户端消息
 * 5、输出对象返回消息
 * 6、释放资源
 * 
 * @author jeadong
 *
 */
public class TcpServer {

	public static void main(String[] args) throws Exception {
//		 * 1、创建服务器socket对象,ServerSocket,侦听1003端口
		ServerSocket serverSocket = new ServerSocket(1003);
//		 * 2、侦听端口
		System.out.println("服务器接收消息中...");
		Socket socket =  serverSocket.accept();
//		 * 3、准备输入和输出对象
		DataInputStream reader = new DataInputStream(socket.getInputStream());
//		 * 4、输入对象读取客户端消息
		System.out.println("收到客户端消息,准备处理...");
		System.out.println("client:"+reader.readUTF());
//		 * 5、输出对象返回消息
		DataOutputStream writer = new DataOutputStream(socket.getOutputStream());
		writer.writeUTF("收到!");
		writer.flush();
//		 * 6、释放资源
		reader.close();
		writer.close();
		socket.close();
		serverSocket.close();
		
		
	}

}

TCP-client

/**
 * TCP客户端,向服务器发送消息
 * 1、创建socket对象,指定服务器IP+端口
 * 2、准备输入和输出对象
 * 3、发送消息
 * 4、接收消息
 * 5、释放资源
 * 
 * @author jeadong
 *
 */
public class TcpClient {

	public static void main(String[] args) throws Exception {
//		 * 1、创建socket对象,指定服务器IP+端口、
		Socket socket = new Socket(InetAddress.getLocalHost(),1003);
//		 * 2、准备输入和输出对象
		DataOutputStream writer = new DataOutputStream(socket.getOutputStream());
//		 * 3、发送消息
		System.out.println("客户端准备发送消息...");
		writer.writeUTF("hello server!");
		writer.flush();
		System.out.println("发送消息结束");
//		 * 4、接收消息
		System.out.println("准备接收服务器反馈...");
		DataInputStream reader = new DataInputStream(socket.getInputStream());
		System.out.println("server:"+reader.readUTF());
		
//		 * 5、释放资源
		reader.close();
		writer.close();
		socket.close();
	}

}

UDP-server


/**
 * 消息推送者:给订阅者推送消息
 * 1、创建UDP消息发送socket对象,发送端口1002,DatagramSocket
 * 2、准备发送信息内容
 * 3、创建发送消息容器,DatagramPacket
 * 4、准备发送地址
 * 5、发送消息
 * 
 * @author jeadong
 *
 */
public class UdpServer {

	public static void main(String[] args) throws Exception {
		
//		 * 1、创建UDP消息发送socket对象,发送端口1002,DatagramSocket
		DatagramSocket socket = new DatagramSocket(1002);
//		 * 2、准备发送信息内容
		byte[] b = "hello world!".getBytes();
//		 * 3、创建接受消息容器,DatagramPacket
		DatagramPacket packet = new DatagramPacket(b,b.length);
//		 * 4、准备发送地址
		packet.setSocketAddress(new InetSocketAddress("localhost", 1001));
//		 * 5、发送消息
		System.out.println("消息推送者,准备推送信息...");
		socket.send(packet);
		System.out.println("消息推送者,推送信息完成。");
		socket.close();
		
	}

}

UDP-client

/**
 * 消息订阅者:接收服务器推送消息
 * 1、创建UDP消息接收socket对象,接收端口1001,DatagramSocket
 * 2、创建接收消息容器,DatagramPacket
 * 3、接收消息
 * 4、收到消息
 * 
 * @author jeadong
 *
 */
public class UdpClient {

	public static void main(String[] args) throws Exception {
		
//		 * 1、创建UDP消息接收对象,接收端口1001,DatagramSocket
		DatagramSocket socket = new DatagramSocket(1001);
//		 * 2、创建接收消息容器,DatagramPacket
		byte[] b = new byte[1024];
		DatagramPacket packet = new DatagramPacket(b,b.length);
//		 * 3、接收消息
		System.out.println("消息订阅者,接收消息中...");
		socket.receive(packet);
//		 * 4、收到消息
		String string = new String(packet.getData(),0,packet.getLength());
		System.out.println("收到消息:"+string);
		socket.close();
		
	}

}

你可能感兴趣的:(技术仓库)