day29 socket
socket
socket 通信简单述说 网络通信的步骤 1)确定对端的ip地址 2)确定应用程序的端口 3)确定通信协议 网络通信的过程其实就是一个(源端)不断封装数据包和(目的端)不断拆包的过程 socket编程 tcp udp 协议: tcp/ip 即传输控制协议/网间协议 定义了主机如何连接到internet 及数据如何在它们之间传输的标准 tcp/ip协议是指因特网整个tcp/ip协议簇, 不同于ios7层模型, tcp/ip协议参考模型把所有的tcp/ip协议归类到四个抽象层中: 应用层(TFTP HTTP SNMP FTP SMTP DNS Telent) 传输层(tcp udp) 网络层(IP IGMP ICMP) 数据链路层 上层建立在下层服务上,下层为上层提供服务 我们利用ip地址+协议+端口号唯一标识: 网络中一个进程。能够唯一标识网络中的一个进程后,它们就能通过socket通信了 我们把socket翻译为套接字 socket是应用层 与传输层(tcp/ip协议簇通信)的一个抽象层,是一组接口,它把tcp/ip复杂的操作抽象为几个简单的接口供应用层调用,实现进程间的网络通信 应用程序两端通过套接字向网络发出请求 或应答网络请求 可以把socket理解为网络把手(hand) socket 起源于 Unix, 在Unix一切皆文件哲学思想下 socket是打开--读/写--关闭模式的实现 服务器和客户端维护一个文件,在建立连接打开后可以向自己文件写入内容,供对象的读取或读取对方的文件内容,通信结束后关闭文件
流程描述 1) 服务端根据地址类型(ipv4 ipv6)socket类型协议创建socket 2)服务端为socket绑定ip+端口 3)服务端监听端口请求随时接收客户端发来的连接,这时服务端的socket没有被打开。 4) 客户端创建socket 5)客户端创建socket 根据服务端ip地址和端口号连接服务器的socket 6) 服务端的socket接收客户端的socket请求,被动打开,开始接收客户端的请求,直到客户端返回连接信息,这时socket进入阻塞状态,阻塞就是accept() 方法,一直等到客户端返回连接信息后才返回,开始接收下个客户端请求 7)客户端连接成功后 向服务端发送连接状态信息 8)服务端accept方法返回 连接成功 9)客户端向socet 写入信息(或服务端向客户端写入信息) 10)服务端(客户端)读取信息 11) 客户端关闭 12) 服务端关闭
简单的
import socket ip_addr = ("127.0.0.1",6666) s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect(ip_addr) s.send("kehuduan".encode("utf-8")) data = s.recv(1024) print(data.decode("utf-8"))
import socket ip_addr = ("127.0.0.1",6666) s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind (ip_addr) s.listen(5) conn,addr = s.accept() msg = conn.recv(1024) print("----->",msg) conn.send("server".encode("utf-8")) conn.close() s.close()
简单的web
#!/usr/bin/env python #encoding:utf-8 import socket ip_addr = ("192.168.2.22",8083) def hand_request(client): buf = client.recv(1024) client.send("HTTP/1.1 200 OK\r\n\r\n".encode("utf-8")) client.send("yslysl".encode("utf-8")) def main(): s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind(ip_addr) s.listen(5) while True: conn,addr = s.accept() hand_request(conn) conn.close() main()
模拟10086
import socket ip_addr = ("127.0.0.1",8888) s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect(ip_addr) while True: data = s.recv(1024) print(data.decode("utf-8")) inp = input("please input>>>>> ").strip() s.send(inp.encode("utf-8")) if inp == "exit":break s.close()
import socket ip_addr = ("127.0.0.1",8888) s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind(ip_addr) s.listen(5) while True: conn,addr = s.accept() conn.send("欢迎致电10086".encode("utf-8")) Flag = True while Flag: data = conn.recv(1024).strip() print(data) if data == "exit".encode("utf-8"): Flag = False elif data == "0".encode("utf-8"): conn.send("可能被录音".encode("utf-8")) else: conn.send("重新输入".encode("utf-8")) conn.close()
posted on 2018-08-24 16:54 augustyang 阅读(246) 评论(0) 编辑 收藏 举报