socket 套接字:网络接口。
我们在网络上需要传输自己需要的数据,我们在网络上传输数据使用的是网络协议,
而套接字就是我们将数据从本地采用协议传输的接口
socket模型:
socket族:
#AF_UNIX 被使用在类unix系统之间进行通信的socket族
#AF_INET 被使用在网络间的通信的socket族
#AF_INET6 被使用在ipv6协议上的socket族
socket类型:
#SOCK_STREAM 针对于tcp/ip协议的socket类型
#SOCK_DGRAM 针对udp协议的socket类型
一、第一个socket例子:
#socket_server
import socket
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #创建socket对象
sock.bind(("127.0.0.1",8001)) #绑定套接字
sock.listen(5) #监听 ,连接等待的队列大小
conn,add=sock.accept() # conn : <socket._socketobject object at 0x7f1c6010da60> 客户端的socket对象 # add: ('127.0.0.1', 34548)
print(conn.recv(512)) #接收信息
conn.send("hello I am server".encode("utf-8")) #发送信息
sock.close() #关闭连接
#socket_client
import socket
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #创建socket对象
sock.connect(("127.0.0.1",8001)) #连接指定服务
sock.send("I am client".encode("utf-8")) #发送信息
print(sock.recv(512)) #打印接收到信息
sock.close() #关闭连接
eg1:
#server
import socket
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.bind(("127.0.0.1",8006))
sock.listen(5)
while True:
conn,add=sock.accept()
while True:
recvs = conn.recv(512)
print(recvs)
if recvs == "break":
break
sends = raw_input(">>>>")
conn.send(sends)
if sends == "break":
break
sock.close()
#client
import socket
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect(("127.0.0.1",8006))
while True:
sends = raw_input(">>>>")
sock.send(sends)
recvs = sock.recv(512)
print(recvs)
if recvs == "break":
break
sock.close()