Socket关键字
Socket (套接字)是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:
它能实现不同主机间的进程通信,我们网络上各种各样的都是基于socket完成通信的,例如每天浏览网页,QQ聊天等。
Socket在不同语言间流程用法是一样的
套接字使用流程与文件使用流程类似:
1.创建套接字
2.使用套接字收发数据
3.关闭套接字
UDP发送数据:
1.创建套接字
socket.socket(IP协议,udp模式)
2.使用套接字发送数据
socket.sendto (发送的内容(字节形式),(目的IP地址,端口)
3.关闭套接字
socket.close()
UDP接收数据:
进程要有个固定端口要接收数据,用bind绑定,绑定必须是自己电脑的IP和Port
from socket import *
#创建套接字
udp_socket=socket(AF_INET,SOCK_DGRAM)
#绑定本地相关信息,如果一个网络程序不绑定,系统会随机分配
local_addr=('',7788)
udp_socket.bind(local_addr)
#等待接收对方发送的数据
recv_data=udp_socket.recvfrom(1024)# 1024表示本次接收的最大字节数
#显示接收到的数据
print(recv_data[0].decode('gbk')
#关闭套接字
udp_socket.close()
同一个端口同一时间内不容许使用两次
发送方可以不用绑定端口,接收方必须要绑定端口
TCP网络编程严格区分客户端和网络端
TCP客户端:
#创建TCP套接字
tcp_socket=socket(AF_INFT,SOCK_STREAM)
#链接服务器
ip=input("IP地址:”)
port=intin(put("port:"))
tcp_socket.connect((ip,port))
#发送数据或接受数据,tcp用send
send_data=input("请输入要发送的数据:")
tcp_socket.send(send_data.encode("gbk")
recvdata=tcp_socket.recv(1024)
print("接收到的数据”, recvdata.decode('gbk'))
#关闭套接字
tcp_socket.close()
想要完成TCP服务器功能,需要流程如下:
1.socket创建一个套接字
2.bind绑定ip和port,服务端要有固定ip和port
3.listen使套接字变为被动链接,会阻塞,当客户端connect时会调用accept方法
前面是监听套接字,负责等待有新的客户端进行连接
4.accept等待客户端的链接
accept产生新的套接字用来为客户端服务
5.recv/send接受发送数据
6.关闭套接字
监听套接字和新产生的套接字都要关
如果作为一个服务器,在调用socket()、bind()之后就会调用listen()来监听这个socket,如果客户端这时调用connect()发出连接请求,服务器端就会接收到这个请求,然后调用accept接收到这个请求,这个时候连接已建立。
菜鸟的自我修养
浙公网安备 33010602011771号