章节内容

  • 套接字Socket
  • 数据报Datagram

章节目标

  • 了解网络通信中的IP,端口和协议
  • 掌握套接字的使用
  • 熟悉数据报的使用

一、网络基础

1.软件结构

C/S结构
C => Client,表示客户端
S => Server,表示服务器端
B/S结构
B => Browser,表示浏览器
S => Server,表示服务器端

2.网络通信协议

TCP
TCP(传输控制协议)是基于连接的协议,可在两台计算机之间提供可靠的数据流。
UDP
UDP(用户数据报协议)是一种协议,它从一台计算机向另一台计算机发送独立的数据包(称为数据报),而不能保证其到达。 UDP不像TCP那样基于连接。而是将独立的 数据包(称为数据报)从一个应用程序发送到另一个应用程序。 发送数据报就像通过邮局发送一封信一样:传递顺序并不重要,也不能保证,每条消息彼此独立。
IP和端口
该IP地址用于将数据传递到网络上正确的计算机
端口由一个16位数字标识,端口号的范围是0到65,535,因为端口由16位数字表示。端口号范围从0 - 1023被限制,供计算机上运行的不同应用程序使用,
URL
URL是“统一资源定位符”的缩写。 URL具有两个主要组成部分:访问资源所需的协议和资源的位置

二、套接字Socket

什么是Socket

套接字是网络上运行的两个程序之间双向通讯链接的一个端点。 套接字类用于表示客户端程序和服务器程序之间的连接。 java.net包提供了两个类-Socket和ServerSocket-分别实现连接的客户端和连 接的服务器。

如何使用Socket

服务器端

服务器只是等待,侦听套接字 以请求客户端发出连接请求。

客户端

客户端知道服务器在其上运行的计算机的主机名以及服务器在其上侦听的端口号。 为了发 出连接请求,客户端尝试在服务器的机器和端口上与服务器会合。 客户端还需要向服务器标识自己,以便客户端绑定到在此连接期间将使用的本地端口号。 这通常是由系统分配的

Socket

Socket常用构造方法

//创建一个套接字,连向给定IP的主机,并与该主机给定端口的应用通信
public Socket(String host, int port) throws UnknownHostException, IOException;
//创建一个套接字,连向给定IP信息的主机,并与该主机给定端口的应用通信
public Socket(InetAddress address, int port) throws IOException;

Socket常用方法

//获取读取数据的通道
public InputStream getInputStream() throws IOException;
//获取输出数据的通道
public OutputStream getOutputStream() throws IOException;
//设置链接的超时时间,0表示不会超时
public synchronized void setSoTimeout(int timeout) throws SocketException;
//标识输入通道不再接收数据,如果再次向通道中读取数据,则返回-1,表示读取到末尾
public void shutdownInput() throws IOException;
//禁用输出通道,如果再次向通道中输入数据,则会报IOException
public void shutdownOutput() throws IOException;
//关闭套接字,相关的数据通道都会被关闭
public synchronized void close() throws IOException;

ServerSocket

ServerSocket常用构造方法

//创建一个服务器套接字并占用给定的端口
public ServerSocket(int port) throws IOException;

ServerSocket常用方法

//侦听与此套接字建立的连接并接受它。 该方法将阻塞,直到建立连接为止。
public Socket accept() throws IOException;
//设置链接的超时时间,0表示不会超时
public synchronized void setSoTimeout(int timeout) throws SocketException; 1234

客户端与服务器端通信

三、数据报Datagram

1.什么是数据报

数据报是通过网络发送的独立的自包含的消息,其是否到达、到达时间和内容无法得到保证。

2.如何使用Datagram

DatagramSocket常用构造方法

//构建一个绑定在任意端口的收发数据报的套接字
public DatagramSocket() throws SocketException;
//构建一个绑定在给定端口的收发数据报的套接字
public DatagramSocket(int port) throws SocketException;

DatagramSocket常用方法

//发送给定的数据包
public void send(DatagramPacket p) throws IOException;
//接收数据至给定的数据包
public synchronized void receive(DatagramPacket p) throws IOException;
//设置链接的超时时间,0表示不会超时
public synchronized void setSoTimeout(int timeout) throws SocketException;

DatagramPacket常用构造方法

//构建一个接收数据的数据包
public DatagramPacket(byte buf[], int length);
//构建一个发送数据的数据包
public DatagramPacket(byte buf[], int offset, int length,InetAddress address,int port);

DatagramPacket常用方法

//获取发送数据的主机IP地址
public synchronized InetAddress getAddress();
//获取发送数据的主机使用的端口
public synchronized int getPort();
//获取数据包中数据的长度
public synchronized int getLength();

网络编程(网络基础、套接字Socket、数据报Datagram及其常用方法)相关推荐

  1. Linux网络编程:原始套接字的魔力【续】

    如何从链路层直接发送数据帧        本来以为这部分都弄完了,结果有朋友反映说看了半天还是没看到如何从链路层直接发送数据.因为上一篇里面提到的是从链路层"收发"数据,结果只&q ...

  2. 【Linux网络编程】UDP 套接字编程

    [Linux网络编程]UDP 套接字编程 [1]用户数据报协议(UDP) UDP是一个简单的传输层协议,不保证UDP数据报会到达其最终目的地,不保证各个数据报的先后顺序跨网络后保持不变,也不保证每个数 ...

  3. UNIX网络编程.卷1,套接字联网API(第3版)(中文版)(Stevens经典著作,两位顶级网络编程专家应邀执笔修订)...

    UNIX网络编程.卷1,套接字联网API(第3版)(中文版)(Stevens经典著作,两位顶级网络编程专家应邀执笔修订) 基本信息 原书名: Unix Network Programming, Vol ...

  4. 网络编程---TCP/UDP套接字编程原理

    本篇介绍的是Linux下的网络编程,故有些接口是不适用于Windows的,但是具体概念和实现方法是大体一致的 本篇重在讲解原理,具体实现请戳这里->UDP套接字编程实现 介绍 网络编程套接字(s ...

  5. 网络编程学习笔记-套接字编程-socket

    本文为了说明例子,用中文作为变量写在了程序里面,一般编程最好不要那么写 前置概念详见 本文目录 概念 基本TCP套接字编程 通信循环 半链接池 链接循环 udp协议 基于TCP协议实现远程执行客户端请 ...

  6. python socket 域名_Python网络编程中的套接字名和DNS解析。

    距离上一次TCP的文章,这一次要讲的是套接字名和DNS,并且还会涉及到网络数据的发送接受和网络错误的发生和处理. 下面说套接字名,在创建和部署每个套接字对象时总共需要做5个主要的决定,主机名和IP地址 ...

  7. Python之网络编程(TCP套接字与UDP套接字)

    文章目录 基于tcp的套接字 实现目标 tcp服务端源码 tcp客户端源码 tcp效果实现 基于udp的套接字 udp作用介绍 udp服务端源码 udp客户端源码 udp效果实现 用udp实现一个时间 ...

  8. [Linux网络编程学习笔记]套接字地址结构

    好久没有看那Linux网络编程这本书了,今天看到了重点部分-TCP套接字.下面先来看看套接字的地址结构 Linux系统的套接字可以支持多种协议,每种不同的协议都是用不同的地址结构.在头文件<li ...

  9. 【Linux网络编程】原始套接字实例:MAC 头部报文分析

    通过<Linux网络编程--原始套接字编程>得知,我们可以通过原始套接字以及 recvfrom( ) 可以获取链路层的数据包,那我们接收的链路层数据包到底长什么样的呢? MAC 头部(有线 ...

  10. 【Linux网络编程】原始套接字编程

    原始套接字编程和之前的 UDP 编程差不多,无非就是创建一个套接字后,通过这个套接字接收数据或者发送数据.区别在于,原始套接字可以自行组装数据包(伪装本地 IP,本地 MAC),可以接收本机网卡上所有 ...

最新文章

  1. 电子书格式怎么在线转换为PDF格式
  2. C++error:找不到指定文件
  3. 1小时搞懂设计模式之策略模式
  4. ListView乱谈之ListView的布局
  5. 在CentOS 7上安装Nginx服务器
  6. 如何阅读MySQL源码
  7. 学习笔记HHL:Generalizing a Person Retrieval Model--Hetero-Homogeneous Learning UDA郑良2018
  8. 去湘菜馆,该不该来壶酸梅汁?
  9. 使用短信登录和注册的流程
  10. android手势第一次设置密码_android实现手势密码
  11. 《遥远的救世主》遵守客观规律(六)——文化属性
  12. MySQL中删除数据库的基本语法格式为_《MySQL数据库》SQL简介、语法格式
  13. 批处理一键打开Windows远程桌面
  14. CSP基础-CSP入门简介
  15. c# log4net安装时在AssemblyInfo中提示找不到log4net解决办法
  16. 跟女神表白用计算机,终于跟女神表白了,她听后没说什么
  17. Hartree-Fock理论(更新中)
  18. JavaScript设计模式与开发实践(网课学习)
  19. 【架构实践】微服务架构全解析:Scale Cube 横向扩展,垂直扩展,纵向扩展
  20. Word(WPS文字)+Python win32com办公自动化

热门文章

  1. 并肩战“疫”,逆风而上
  2. 要警惕眼睛有红血丝和黑点!
  3. Qt Creator用法详解
  4. word中定义新编号格式时后面出现空白解决方法
  5. 青少年CTFmisc-间谍的录音
  6. 手机拨出等待时间长_智能手机用户在升级前等待的时间更长 这就是原因
  7. Vue leaning(入门)第四弹
  8. docker部署nacos集群
  9. 使用Consul建立Docker集群(五)
  10. 记录支付宝手机网站(WAP)支付踩过的坑