Socket原理与编程基础
•socket简介
socket是进行通讯的一种方式,即调用这个网络库的一些api韩寒苏实现分布在不同主机的相关进程之间的数据交换。
名词定义:
1)IP地址:依照TCP/IP协议分配给本地主机的网络地址,2个进程要通信,任一进程首先要知道通讯对方的位置,即IP地址。
2)端口号:用来辨别本地通讯进程,一个本地的基尼从在通讯时均会占用一个端口号,不同的进程端口号不同,因此在通讯前必须要分配一个没有访问的端口号。
3)连接:两个进程间的通讯链路
•客户/服务端模式
•服务端:其过程是首先服务器放要先开启,并根据请求提供相应的服务。
1)打开一通信通道并告知本地主机,他愿意在某一个公认地址上某端口接收客户请求
2)等待客户请求到到该端口
3)接收到客户端的请求时,处理该请求并发送应答信号。接收到并发服务请求,要激活一新进程来处理这个客户请求,新进程处理此客户请求并不需要对其请求做出应答。服务完成后,关闭新进程与客户的通信链路,并终止。
4)返回第2步骤,等待另外一个客户请求
5)关闭服务器
•客户端:
1)打开-通信通道,并连接到服务器所在主机的特定端口
2)向服务器发请求报文,等待并接收应答,继续提出请求
3)请求结束后关闭通道并终止。
•说明:
1)从上面的模式来看,流程会有所不同,因此其代码也会不同
2)服务器进程先启动,主要系统运行,该服务进行就一直存在,知道进程关闭。
•常见API函数
1)socket():创建套接字,-- create a new socket object
2)bind(address):绑定本地地址,必须确保之前没有绑定过。
3)close():
4)accept(self):
accept() -> (socket object, address info) 返回connection、address对,其中connection是新的socket对象,可以在上面发送和接收数据,address是另一端的socket地址
5)connect(address):连接该地址上的远端socket
6)getsockname():getsockname() -> address info 返回socket自己的地址,对查找端口号有用
7)listen(backlog):监听socket连接,参数表示最大连接队列数,通常为5,最小为0
8)recv(bufsize):recv(buflen[, flags]) -- receive data 接收数据,返回表示接收到数据的string。bufsize表示一次接收到的数据最大量
9)send(string):发送数据,返回发送的数据量,程序自己负责检查是否所有的数据已发送并自己处理未发送的数据
10)sendall(string):sendall(data[, flags]) 发送数据,该函数会持续发送数据知道数据发送完毕或出现错误为止。若发送成功返回none。
11)settimeout():
设置阻塞模式下socket的超时时间,其值以秒计算,若给定float,socket的后续操作若在给定超时时间内没有完成,将触发timeout异常。
12)gettimeout():返回超时时间,单位秒或None
13)gethostname():gethostname() -> string 返回当前主机名,--return the current hostname
14)gethostbyname():
gethostbyname(host) -> address 通过主机名获取IP地址,参数为主机名,如:PC-20150412FUUA-- map a hostname to its IP number
15)gethostbyaddr():
gethostbyaddr(host) -> (name, aliaslist, addresslist) 参数为主机名或IP地址 -- map an IP number or hostname to DNS info,如:('PC-20150412FUUA', [], ['fe80::349b:92dc:1bb2:58ca'])
16)getservbyname():
socket.getservbyname('http','tcp') 参数:将服务名和一个协议名,返回的是端口号-- map a service name and a protocol name to a port number
相关文章
- TensorFlow基础篇——(二)TensorFlow和keras中参数配置的用法
- Shell编程基础篇-上
- 编程零基础应当如何开始学习 Python?
- 2023神仙级python入门教程(非常详细),从零基础入门到精通,从看这篇开始!
- python基础编程:python如何实现浪漫的烟花秀(附代码)
- Linux 面试基础问题 - 3
- C 语言基础,来喽!
- 快速上手typescript(基础篇)
- Java编程基础
- Java高并发编程基础三大利器 - CountDownLatch
- 《数字图像处理与机器视觉——Visual C++与Matlab实现》——1章 Matlab图像处理编程基础
- MySQL编程基础
- 基础编程教程推荐
- SwiftUI语言基础之tuple 从入门到精通
- Flet教程之 18 Divider 分隔符组件 基础入门(教程含源码)
- 【正点原子Linux连载】第八章 信号:基础-摘自【正点原子】I.MX6U嵌入式Linux C应用编程指南V1.1
- 第二章 Java编程基础
- Python编程基础:实验3——字典及集合的使用
- python3编程基础之一:量的表示
- 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---46
- 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---34
- 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---05
- python界面Tkinter编程(基础)
- C++基础 简单计算