?
?
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()
?