python socket編程

來源:互聯網
上載者:User

標籤:python   socket   tcp   

Python 提供了兩個基本的 socket 模組。
第一個是 Socket,它提供了標準的 BSD Sockets API。

第二個是 SocketServer, 它提供了伺服器中心類,可以簡化網路伺服器的開發。

socket類型通訊端格式:

socket(family,type[,protocal])
使用給定的地址族、通訊端類型、協議編號(預設為0,一般不寫)來建立通訊端。

地址族:
socket類型 描述
socket.AF_UNIX 單一個unix處理序間通訊
socket.AF_INET 伺服器之間的通訊
scoket.AF_INET6 IPV6使用
通訊端類型:
socket類型 描述
socket.SOCK_STREAM 流式 for TCP
socket.SOCK_DGRAM 報文式資料包 for UDP
scoket.SOCK_RAW 原始通訊端,普通的通訊端無法處理ICMP、IGMP等網路報文,而SOCK_RAW可以;其次,SOCK_RAW也可以處理特殊的IPv4報文;此外,利用原始通訊端,可以通過IP_HDRINCL通訊端選項由使用者構造IP頭。
socket.SOCK_SEQPACKET 可靠的連續資料包格式

服務端與用戶端不能直接發送列表,元組,字典。需要字串化repr(data)。

建立TCP伺服器樣本:

思路:
1、建立socket對象
tcpSerSock=socket(AF_INET,SOCK_STREAM) #創伺服器通訊端
2、綁定主機和連接埠,應當是一個元組
tcpSerSock.bind(ADDR) #通訊端與地址綁定
3、監聽
tcpSerSock.listen(5) #監聽串連,傳入串連請求的最大數
4、等待串連
conn,addr = tcpSerSock.accept() addr是IP地址,conn是發送來的資料對象
5、接受資料
data = conn.recv() 需要用conn這個對象來操作
6、發送資料
conn.send(data) or conn.sendall(data)
7、關閉通訊端
conn.close()
tcpSerSock.close()
*這裡用的decode和encode是python3建立socket時需要bytes資料
發送的時候,需要使用encode(),對端接收到,需要使用decode()

*

#建立TCP伺服器from socket import *from time import ctimeimport subprocessHOST=‘‘PORT=21567BUFSIZ=1024ADDR=(HOST,PORT)tcpSerSock=socket(AF_INET,SOCK_STREAM) #創伺服器通訊端tcpSerSock.bind(ADDR) #通訊端與地址綁定tcpSerSock.listen(5)  #監聽串連,傳入串連請求的最大數while True:    print(‘waiting for connection...‘)    tcpCliSock,addr =tcpSerSock.accept()    print(‘...connected from:‘,addr)    while True:        data =tcpCliSock.recv(BUFSIZ).decode()        if not data:           continue        print(‘command=‘,data)        status,result = subprocess.getstatusoutput(data)        if result.strip() == 0:            tcpCliSock.send((‘[%s] create a dir or file finish! ‘ %(ctime())).encode())        else:            tcpCliSock.send((‘[%s] %s‘ %(ctime(),result)).encode())    tcpCliSock.close()tcpSerSock.close()

TCP用戶端樣本:
思路:
1、建立socket對象
tcpCliSock=socket(AF_INET,SOCK_STREAM) #創伺服器通訊端
2、串連主機,應當是一個元組
tcpCliSock.connect(ADDR) #通訊端與地址綁定
3、發送資料
tcpCliSock.send(data) or sendall(data)
4、接收資料
tcpCliSock.recv(1024)
5、關閉
tcpCliSock.close()

from socket import *HOST = ‘localhost‘ #  or ‘localhost‘PORT = 21567BUFSIZ = 1024ADDR=(HOST,PORT)tcpCliSock = socket(AF_INET,SOCK_STREAM)tcpCliSock.connect(ADDR)while True:    data = input(‘> ‘)    #print(‘data=‘,data);    if not data:        break    tcpCliSock.send(data.encode())    data = tcpCliSock.recv(BUFSIZ).decode()    if not data:        break    print(data)tcpCliSock.close()
建立UDP伺服器

UDP協議則不需要事先建立串連,直接互相發送資料即可。
UDP服務端樣本:
思路:
1、建立socket通訊端
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
2、綁定
host=("",8000)
s.bind(host)
3、接受串連
s.recvfrom(1024)
4、發送資料
s.sendto(data,addr) 第二個參數為用戶端IP
5、關閉
s.close()

import sockets = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)host=("",8000)s.bind(host)while True:    data,address = s.recvfrom(1024)    print(data.decode(),address)    senddata = "this is a udp server"    s.sendto(senddata.encode(),address)c.close()

UDP用戶端樣本:
1、建立通訊端
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
2、串連
host=("127.0.0.1",8000)
s.connect(host)
3、發送資料
s.send(data)
4、接收資料
s.recv(1024)
5、關閉

import sockets = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)host=("127.0.0.1",8000)s.connect(host)while True:    message = input("message:")    s.send(message.encode())    data = s.recv(1024)    print(data.decode())sl.close()

python socket編程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.