网络通信–Socket
socket套接字通信分为两种
1UDP
2TCP
一、UDP–使用udp传送数据
1、创建套接字
使用UDP之前需要导入socket库
upd_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #两个参数代表含义ipv4,tcp
2、UDP发送/接受数据
(1) 发送数据
udp_socket.sendto(string, (‘IP’,端口号))
#第一个参数为发送的数据,第二个参数为要发送给即:-目标主机
string 一般只支持二进制,所以发送前需要编码 string = string.encode(‘utf-8’)
(2)接受数据
udp_socket.bind((‘ip’,端口))#绑定方法传入的是一个元组
udo_socket.recvfrom(size)#size表示接受数据的大小
3、关闭套接字
udp_socket.close()
思路:
1、创建套接字对象,
2、在知道对面IP和端口号的前提下发送数据
3、关闭套接字
问题:1、为什么要知道IP和端口号才能发送?
网络上IP是区分不同电脑的一种方式,所以通过IP可以知道发给那一台电脑,一台电脑上有很多运行程序,一个程序占用一个端口,唯一的端口号,使其不会发送给错误的程序
二、TCP–使用TCP传送数据
1、创建套接字
tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
2、连接服务器发送数据/客户端接受数据
(1)TCP接受数据
tcp_server_socket.bind(('', 7890))#绑定信息
tcp_server_socket.listen(128)#让套接字变为被动模式listen
new_client_socket,client_addr = tcp_server_socket.accept()#等待被连接,连接后产生一个新的套接字,这个套接字就是用来处理他们两个之间的信息传送,而之前的套接字是用来处理接收所有套接字然后转接
reve_data = new_client_socket.recv(1024)#接受数据,接收到的是二进制的,需要转码
#回送一部分数据给客户端
new_client_socket.send('ha'.encode('utf-8'))
new_client_socket.close()
(2)TCP发送数据
tcp_socket.connect((‘ip’,port))#iPh和端口号
tcp_socket.send(send_data.encode('utf-8'))
3、关闭套接字
tcp_socket.close()
思路:
1、TCP作为发送时简单,连接要发送的主机IP和端口。发送数据
2、作为接受方的时候,需要绑定自身的IP和端口号,然后变为监听模式-listen,被连接成功会产生新的套接字,和访问方的IP和端口,接受数据,回送数据
大总结:
1、一般发送方不需要自身绑定,需要知道服务器的IP和端口号,而服务器方需要绑定
2、当TCP循环处理一个客户端发送来的信息的时候,需要判断客户端请求是否结束