1. socket概述
socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。
socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭"模式的实现,服务器和客户端各自维护一个"文件",在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。
UNIX BSD有:管道(pipe)、命名管道(named pipe)软中断信号(signal)
UNIX system V有:消息(message)、共享存储区(shared memory)和信号量(semaphore)等.
2.接口详解
bind():绑定socket到本地地址和端口,通常由服务端调用
listen():TCP专用,开启监听模式
accept():TCP专用,服务器等待客户端连接,一般是阻塞态
send():TCP专用,发送数据
recvfrom():UDP专用,接收数据,返回数据远端的IP地址和端口
socket():创建socket
recv():TCP专用,接收数据
connect():TCP专用,客户端主动连接服务器
sendto():UDP专用,发送数据到指定的IP地址和端口
closesocket():关闭socket
3. 什么是TCP/IP、UDP
TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的。
TCP/IP协议存在于OS中,网络服务通过OS提供,在OS中增加支持TCP/IP的系统调用——Berkeley套接字,如Socket,Connect,Send,Recv等
UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是属于TCP/IP协议族中的一种
TCP/IP协议族包括运输层、网络层、链路层,而socket所在位置,Socket是应用层与TCP/IP协议族通信的中间软件抽象层。
网络编程的概念:
网络编程从大的方面说就是对信息的发送到接收,中间传输为物理线路的作用,编程人员可以不用考虑……
网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的!中间最主要的就是数据包的组装,数据包的过滤,数据包的捕获,数据包的分析,当然最后再做一些处理!
网络编程三要素:
1:IP地址 2:端口 3:协议
什么是IP地址?为什么需要IP地址?
ip地址就好像一个人寄快递 将详细地址写在 快递上 然后交给快递员 这时 快递员将快递交给 对方
所以两台计算机通信 双方都必须得有地址 → IP地址
ip地址 (internet Protocol) 唯一标识网络上的每一台计算机
ip地址的组成 32位 由4个8位二进制数组成
IP地址 = 网络地址 +主机地址
网络地址:标识计算机或网络设备所在的网段
主机地址:标识特定主机或网络设备
IP地址的分类:
A类:1.0.0.1---127.255.255.254 1.x.x.x 私有有地址(在互联网上不用,而用在局域网中)
B类:128.0.0.1---191.255.255.254 172.16.0.0---172.31.255.255 私有地址
C类:192.0.0.1---223.255.255.254 192.168.x.x私有地址
D类:224.0.0.1---239.255.255.254 公共的地址
E类:240.0.0.1---247.255.255.254 公共的地址
特殊IP:
127.0.0.1 回环地址
x.x.x.255 广播地址
x.x.x.0 网络地址
如何查看本机的IP地址
ipconfig
测试网络是否通畅
ping + IP地址
端口:
有效端口:0-65535 其中0-1024系统使用或保留端口。
什么是Socket
Socket就是通信链路的端点就被称为“套接字”(英文名Socket)
Socket相对来说他的底层机制复杂,后来Java平台提供了一些简单的API,可以更简单有效的使用Socket开发而无需了解底层机制
Socket套接字
是网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。
socket实现的原理机制:
1、通信的两端都有Socket
2、网络通信其实就是Socket间的通信
3、数据在两个Socket间通过IO传输
Socket网络编程可以分成如下步骤进行
如何实现多客户请求呢?
1.采用多线程的方式
2.一个专门负责监听的应用主服务程序
3.一个专门负责处理请求的线程程序
基于UDP协议的Socket网络编程步骤
1.利用 DatagramPacket 对象封装数据报
2.利用 DatagramSocket 发送数据报
3.利用 DatagramSocket 接收数据报
4.利用 DatagramPacket 处理数据报