郑州营销型网站建设工作室常州app网站
郑州营销型网站建设工作室,常州app网站,工程网络图,一站式营销平台socket套接字/TCP 一 客户端/服务器架构 C/S架构#xff0c;包括 硬件C/S架构#xff08;打印机#xff09;软件C/S 架构#xff08;web服务#xff09;C/S架构的软件#xff08;软件属于应用层#xff09;是基于网络进行通信的Server端要#xff1a; 1.力求一直提供服…socket套接字/TCP 一 客户端/服务器架构 C/S架构包括 硬件C/S架构打印机软件C/S 架构web服务C/S架构的软件软件属于应用层是基于网络进行通信的Server端要 1.力求一直提供服务, 2.要绑定一个唯一的地址让客户端能够明确的找到 二 osi七层 互联网的核心基于一堆互联网协议组成 Tcpip 找到全世界独一无二的软件 互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层 每层运行常见物理设备 详细参考 http://www.cnblogs.com/linhaifeng/articles/5937962.html#_label4 三 socket层 四 socket是什么 Socket是应用层与TCP/IP协议族通信的中间软件抽象层它是一组接口在设计模式中Socket其实就是一个门面模式它把复杂的TCP/IP协议族隐藏在Socket接口后面。 五 套接字发展史及分类 基于文件类型的套接字家族 套接字家族的名字AF_UNIX unix一切皆文件基于文件的套接字调用的就是底层的文件系统来取数据两个套接字进程运行在同一机器可以通过访问同一个文件系统间接完成通信 基于网络类型的套接字家族 套接字家族的名字AF_INET 地址家族由于我们只关心网络编程所以大部门我们只使用AF_INET 六 套接字工作流程 服务器端服务器端先初始化Socket然后进行端口绑定bind对端口进行监听listen调用accept阻塞等待客户端连接。 客户端客户端初始化Socket然后连接服务器connect如果连接成功这时客户端与服务器端的连接就建立了客户端发送数据请求服务器接收请求并处理请求然后把回应数据发送给客户端然后把回应数据发送给客户端客户端读取数据最后关闭连接一次交互结束。 Socket()模块函数用法 import socket
socket.socket(socket_family,socket_type,protocal0)
socket_family(可以是AF_UNIX 或 AF_INET)
socket_type(可以是 SOCK_STREAM 或 SOCK_DGRAM)
protocal一般不填默认值为0#获取tcp/ip套接字
tcpSocksocket.socket(socket.AF_INET,socket.SOCK_STREAM)#获取udp/ip套接字
udpSocksocket.socket(socket.AF_INET,socket.SOCK_DGRAM)服务端套接字函数 s.bind() 绑定主机端口号到套接字 s.listen() 开始TCP监听 s.accept() 被动接受TCP客户的连接阻塞式等待连接的到来 客户端套接字函数 s.connect() 主动舒适化TCP服务器连接 s.connect_ex() connect()函数的扩展版本出错时返回出错码而不是抛出异常 公共用途的套接字函数 s.recv() 接收TCP数据 s.send() 发送TCP数据send在待发送数据量大于己端缓存区剩余空间时数据丢失不会发完 s.close() 关闭套接字 socket通信流程与打电话流程类似: #服务端
import socket
phonesocket.socket(socket.AF_INET,socket.SOCK_STREAM) #买手机
phone.bind((127.0.0.1,8000)) #绑定手机卡
phone.listen(5) #开机print(starting.....)
conn,addrphone.accept() #等待电话链接print(电话线路是,conn)
print(客户端的手机号是,addr)
while True:#通信循环dataconn.recv(1024) #收消息print(客户端发来的消息是,data)conn.send(data.upper())conn.close()phone.close()执行结果
starting.....
电话线路是 socket.socket fd304, familyAddressFamily.AF_INET, typeSocketKind.SOCK_STREAM, proto0, laddr(127.0.0.1, 8000), raddr(127.0.0.1, 54668)
客户端的手机号是 (127.0.0.1, 54668)
客户端发来的消息是 bbith#客户端
import socket
phonesocket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.connect((127.0.0.1,8000))while True:#通信循环msginput(: ).strip()if not msg:continuephone.send(msg.encode(utf-8))dataphone.recv(1024)print(data)phone.close()执行结果
: bith
bBITH修改版本 客户端终止服务端程序不会中断 #服务端
import socket
phonesocket.socket(socket.AF_INET,socket.SOCK_STREAM) #买手机
phone.bind((127.0.0.1,8000)) #绑定手机卡
phone.listen(5) #开机
print(starting.....)
while True: #链接循环conn,addrphone.accept() #等待电话链接print(电话线路是,conn)print(客户端的手机号是,addr)while True:#通信循环try: #应对Windows系统dataconn.recv(1024) #收消息print(客户端发来的消息是,data)conn.send(data.upper())except Exception:breakconn.close()phone.close()执行结果
starting.....
电话线路是 socket.socket fd304, familyAddressFamily.AF_INET, typeSocketKind.SOCK_STREAM, proto0, laddr(127.0.0.1, 8000), raddr(127.0.0.1, 55009)
客户端的手机号是 (127.0.0.1, 55009)
客户端发来的消息是 bs
电话线路是 socket.socket fd304, familyAddressFamily.AF_INET, typeSocketKind.SOCK_STREAM, proto0, laddr(127.0.0.1, 8000), raddr(127.0.0.1, 55010)
客户端的手机号是 (127.0.0.1, 55010)#客户端
import socket
phonesocket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.connect((127.0.0.1,8000))while True:#通信循环msginput(: ).strip()if not msg:continuephone.send(msg.encode(utf-8))dataphone.recv(1024)print(data)phone.close()转载于:https://www.cnblogs.com/niejinmei/p/6803105.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/91556.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!