第2章 网络客户端

一、理解socket

socket正如前文所说用于进程之间的通信,相当于是操作系统的I/O的延伸。

二、建立socket

先建立一个实际的socket对象,然后再将其连接到远程服务器。

建立socket对象时包含通信类型和协议家族。通信类型包括IPv4、IPv6、IPX/SPX(Netware)和AFP(Apple文件共享)。通常使用AF_INET,即IPv4。协议家族一般包括TCP通信的SOCK_STREAM和UDP通信的SOCK_DGRAM。连接对象时需提供一个包含远程主机名或IP地址和端口号的元组。对于不知道端口号的,可通过socket库的getservbyname函数来获得,格式为:socket.getservbyname(servicename[,protocolname]),服务名和协议名(tcp,udp)。

通过socket库来建立。类似如下:

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((‘www.baidu.com‘,80))

利用socket通信时可以用socket对象,也可以用文件对象。用socket对象的情况:读写数据时,需要协议可以详细地控制时、使用二进制协议传送固定大小数据时、数据超时需要特殊处理时,或是任何不止需要简单读写时,还有编写UDP程序时。而文件类对象一般用于面向线性的协议,只能用于TCP

socket模块的4种异常:

与一般I/O和通信问题有关的socket.error;与查询地址信息有关的socket.gaierror;与其他地址错误有关的socket.herror;与在一个socket调用settimeout()后,处理超时有关的socket.timeout

对于很多操作系统来说,又是在网络上发送数据的调用会在远程服务器收到信息前返回,因此可能有sendall成功调用返回但服务器收不到信息的情况发生。通过结束写操作后调用shutdown函数来解决。

三、总结

创建TCP客户端伪代码:

cs=socket()
cs.connect()
comm_loop:
    cs.send()/cs.recv()
cs.close()

创建UDP客户端伪代码

ss=socket()
ss.bind()
inf_loop:
    cs=ss.recvfrom()/ss.sendto()
ss.close()

socket对象方法:

函数
描述

服务器端套接字
s.bind() 绑定地址(主机名,端口号名)到套接字,主机名必须是本机,可以为空,代表所有地址
s.listen() 开始TCP监听,参数一般为5
s.accept() 被动接受TCP客户端连接,(阻塞式)等待连接
,参数为socket对象和(host,port)元组。
客户端套接字
s.connect() 主动初始化TCP服务器连接,参数为(host,port)
s.connect_ex() 出错时返回出错码,而非抛出异常
公共的套接字
s.recv() 接受数据,参数为buflen
s.send() 发送TCP数据,参数为data
s.sendall()
完整发送TCP数据

s.recvfrom() 接受UDP数据,接受到的结果为data和发送者地址
s.sendto() 发送UDP数据,参数为data和addr
s.getpeername() 连接到当前套接字的远端的地址,
s.getsockname() 当前套接字的地址
s.setsockopt() 设置指定套接字的参数
s.close() 关闭套接字
面向模块的套接字函数
s.setblocking() 设置套接字的阻塞和非阻塞模式(0|1)
s.settimeout() 设置阻塞套接字操作的超时时间
s.gettimeout() 得到阻塞套接字操作的超时时间
面向文件的套接字函数
s.fileno() 套接字的文件描述符
s.makefile() 创建一个与该套接字关联的文件对象
时间: 2024-11-15 20:32:56

第2章 网络客户端的相关文章

联想教育应用使用说明(7.6版本)——第4章 网络控制工具的使用

第4章网络控制工具的使用 第1章联想教育应用方案功能简介http://blog.csdn.net/u013634961/article/details/39615525 第2章联想教育应用的首次部署http://blog.csdn.net/u013634961/article/details/39616325 第3章联想教育应用的日常维护与使用 http://blog.csdn.net/u013634961/article/details/39804509 第4章网络控制工具的使用 http:/

2016.9.21 鸟哥私房菜服务器篇-第二章网络基础-总结

第二章-网络的基本概念 2.1网络 操作系统很多,比如windows/linux/os X等,这么多的操作系统(不同国家的人)如何进行网络沟通(语言交流)呢? 制定共同的标准.然后在你的系统里提供可以加入该标准的程序代码. 网络是跨平台的. 2.1.1 什么是网络 网络就是几部计算机主机或者网络打印机之类的接口设备,通过网线或者无线网络技术,将这些主机与设备连接起来,使得数据可以通过网络介质(网线或者网卡等硬件)来传输的一种方式. 以太网已经是一项公认的标准接口了,大家可以依据这个标准来开发自己

[CSAPP笔记][第十一章网络编程]

第十一章 网络编程 我们需要理解基本的客户端-服务端编程模型,以及如何编写使用因特网提供的服务的客户端-服务端程序. 最后,我们将把所有这些概念结合起来,开发一个小的但功能齐全的Web服务器,能够为真实的Web浏览器提供静态的和动态的文本和图形内容. 11.1 客户端 - 服务器编程模型 每个网络应用程序都是基于客户端 - 服务器模型的 采用这种模型,一个应用是由一个服务器进程 和一个或多个客户端进程组成. 服务器管理某种资源,并且通过操作这种资源为它的客户端提供某种服务. WEB服务器,代表客

第13章 网络编程

1 /***************** 2 ***第13章 网络编程 3 *******知识点: 4 **************1.基本概念 5 ******************1.1 网络OSI模型 6 ******************1.2 IP地址 7 ******************1.3 端口地址 8 ******************1.4 通讯协议 9 **************2.Java网络相关类 10 ******************2.1 URLDe

第五章 网络与并发编程

第五章 网络与并发编程 1.网络编程 1.1 网络编程定义 基于多台机器之间的通信需要基于网络编程 1.2 web程序的架构 C/S架构:client(客户端)/server(服务端) 所有需要安装的.exe文件都属于客户端 B/S架构:breowser(浏览器)/server(服务端) 所有能被网页访问的网络都是B/S架构 C/S和B/S之间的关系:所有的B/S架构都需要一个浏览器才能访问,浏览器是一个软件,相当于客户端,多有的B/S架构也都是C/S架构的,浏览器(breowser)是特殊的客

《深入Java虚拟机学习笔记》- 第4章 网络移动性

Java虚拟机学习笔记(四)网络移动性 <深入Java虚拟机学习笔记>- 第4章 网络移动性,布布扣,bubuko.com

联想教育应用使用说明(7.6版本号)——第4章 网络控制工具的使用

第4章网络控制工具的使用 第1章联想教育应用方案功能简单介绍http://blog.csdn.net/u013634961/article/details/39615525 第2章联想教育应用的首次部署http://blog.csdn.net/u013634961/article/details/39616325 第3章联想教育应用的日常维护与使用 http://blog.csdn.net/u013634961/article/details/39804509 第4章网络控制工具的使用 http

+++++++icfg,ip,nmcli网络属性配置及网络客户端工具使用

Linux主机联网:ifcofnig,route,netstat,ip,ss 别名.主机名.接口命名 网络客户端工具命令: ftp,lftp,wget,lftpget nmap,ncat,tcpdump工具 nmcli,nmtui <没有CentOS 7 不能使用..以后在补> Linux主机联网 1.配置IP 2.配置ROUTE 3.配置DNS 配置方式 1.命令行:立即生效,重启失效 2.配置文件 3.图形接口 配置方式 1.命令行配置: 配置在内核中的内存地址中,下次重启失效 1)ifc

Linux进程查看与管理、作业控制、网络客户端工具

写在前面: 博客书写牢记5W1H法则:What,Why,When,Where,Who,How. 本篇主要内容: ● 基础概念介绍 进程优先级 进程状态 ● 进程查看与管理命令     pstree     ps     pgrep/pkill     pidof     top     htop     vmstat     pmap     glances     dstat     kill     killall ● linux作业控制     nice     renice ● 网络客户