Socket
一、什么是Socket:
Socket 又称“套接字”,应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。
二、理解Socket:
我们写的网络编程,它是属于应用层的,当我们写好程序后,需要将数据发送给传输层,但是应用层和传输层通信是需要遵循相关的协议的,因此提供了Socket来代替传输层协议。Socket是应用层与TCP/IP协议族通信的中间软件抽象层
三、socket()函数:
Python中,我们用 socket() 来创建套接字,语法如下
socket.socket(family = AF_INET [,type = SOCK_STREAM])
family | 套接字家族有AF_INET或者AF_UNIX |
---|---|
type | 套接字类型有面向连接和非连接SOCK_STREAM和SOCK_DGRAM |
四、基于UDP的Socket使用:
server:
import socket
# 创建一个服务器 socket 对象
server = socket.socket(type= socket.SOCK_DGRAM)
#绑定套接字
ip_port = ("127.0.0.1",8080)
server.bind(ip_port)
while True:
#接受客户端的消息
msg,addr =server.recvfrom(1024)
msg = msg.decode("UTF-8")
print("client>>>:{}".format(msg))
#回复客户端
content = input("请输入你回复的消息:")
content = content.encode("UTF-8")
server.sendto(content,addr)
#关闭服务器套接字
server.close()
client:
import socket
#创建一个对象
client = socket.socket(type=socket.SOCK_DGRAM)
#给服务器发消息
ip_port = ("127.0.0.1",8080)
while True:
content = input("请输入你的聊天内容:")
#以UTF-8对content进行编码,获取二进制的类型对象,encode进行编码
content = content.encode("UTF-8")
#向服务器发一条消息,client.sendto 发送UDP数据,将数据发送到套接字address形式是(ip地址,port)的元组,指定的远程地址
client.sendto(content,ip_port)
#接受服务器消息
#接受的是从服务器返回的消息,client.recvfrom()接受的UDP数据,但返回的是(data,address),data是包含接收数据的字符串
msg,addr = client.recvfrom(1024)
msg = msg.decode("UTF-8")
#打印消息
print("server>>>:".format(msg))
#关闭套接字
client.close()
五、基于TCP的Socket使用:
TCP_server:
import socket
# 创建一个服务器套接字
TCP_server = socket.socket(type=socket.SOCK_STREAM)
# 绑定端口
ip_port = ("127.0.0.1",8080![在这里插入图片描述](https://img-blog.csdnimg.cn/20200103181202683.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0NzAwODIw,size_16,color_FFFFFF,t_70))
TCP_server.bind(ip_port)
TCP_server.listen(5)
print("等待连接中>>>")
# 将socket创建的套接字编程被动型,等待客户连接请求。
# 让服务器阻塞,等待客户端的连接
client_socket,client_addr = TCP_server.accept()
print("{}已连接".format(client_addr))
while True:
# 接收客户端发来的消息
recv_msg = client_socket.recv(1024)#接收1024个字节
recv_msg = recv_msg.decode("UTF-8")
#打印客户端信息
print(">>>TCP_client:{}".format(recv_msg))
#发给客户端
msg = input("给客户端发的消息:")
msg = msg.encode("UTF-8")
client_socket.send(msg)
#关闭套接字
client_socket.close()
tcp_server.close()
TCP_client:
import socket
#1、创建客户端的套接字
TCP_client = socket.socket(type=socket.SOCK_STREAM)
#2、连接服务器端口
ip_port = ("127.0.0.1",8080)#服务器的ip和端口
TCP_client.connect(ip_port)
#3、给服务器发消息
while True:
msg = input("发消息给服务器:")
msg = msg.encode("UTF-8")
TCP_client.send(msg)
#4、接收服务器的消息
recv_msg = TCP_client.recv(1024)
recv_msg = recv_msg.decode("UTF-8")
#5、打印返回的消息
print(">>>TCP_server:{}".format(recv_msg))
#6、关闭套接字
TCP_client.close()
愿时光能缓,愿故人不散;愿你惦记的人能和你道晚安,愿你独闯的日子不再孤单。加油!