TCP/IP 三次握手 第一次 A向B 发送 syn 请求 然后B给A返回 syn + ack A收到后,给B返回ack 握手成功。 Socket 网络编程 实现通信 要通过IP+Port Socket是对所有上层协议的封装,它只关注 发送数据 和 接收数据 Socket使用方法: --发送端 伪代码 import socket # 声明协议 socket.TCP/IP # 建立连接 connect(a.ip,a.port) # 发送请求 socket.sent(hello) socket.recv() socket.close() --------------------- --接收端 伪代码 import socket # 声明协议 socket.TCP/IP # 监听端口 (监听IP,监听端口) listen(0.0.0.0,9990) # 等待链接 waiting() # 接收数据 recv() send() Socket Families (地址簇) socket.AF_UNIX 本机进程间通信 socket.AF_INET IPV4 socket.AF_INET6 IPV6 Socket Types socket.SOCK_STREAM # for tcp socket.SOCK_DGRAM # for udp socket.SOCK_raw # 原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而它可以。其次SOCK_RAW也可以处理特殊的 socket.SOCK_RDM # 是一种可靠的UDP形式,即保证交付数据报但不保证顺序。
客户端代码:
#!/usr/bin/env python import socket # 申明协议类型 client = socket.socket() #申明socket类型,同事生成socket连接对象 # 设置请求端口 client.connect(("localhost",6969)) while True: msg = input(">>:").strip() #发送数据 #client.send(b"Hello World") client.send(msg.encode("utf-8")) data = client.recv(1024) print("recv:",data.decode()) client.close()
服务端代码:
#!/usr/bin/env python import socket # 声明协议 server = socket.socket() server.bind(("localhost",6969)) # 绑定要监听的端口 server.listen() # 监听 print("等待通信中。。。") # 等待通信 # conn就是客户端连过来,而在服务器端为其生成的一个连接实例 conn,addr = server.accept() # 它会返回两个值 一个是连接对象,另一个是链接地址 print("conn,addr",conn,addr) print("消息来啦...") while True: # 接受信息 data = conn.recv(1024) print("recv:",data.decode()) conn.send(data) server.close()