Python支持socket進行編程,其API跟C中的大同小異。
TCP方式編程支持server/client方式
一、TCP方式
server 端
server端的socket一般流程是這樣:
1 建立一個socket(可以選擇socket類型INET,UNIX等,以及連接方式TCP/UDP)
2 <span style="font-family: Arial, Helvetica, sans-serif;">使用bind公開一個端口,使得client可以方便連接
3 設置一個listen隊列的大小
4 進入一個無限循環,在此無限循環中,使用accept函數來等待客戶連接,此函數返回一個新的socket, 對應於客戶端的socket,建立通信信道。對socket的處理一般放在外部單獨的函數中(併發)
5 通過send()/recv()來對socket進行讀寫操作</span>
client端
1 建立一個新的socket
2 使用connect函數與遠程主機獲得連接
3 在此socket上進行I/O操作
服務器端基本代碼如下:
def tcpServer():
srvsock = socket.socket( socket.AF_INET, socket.SOCK_STREAM)
srvsock.bind(('', 9527))
srvsock.listen(5)
while True:
clisock, (remoteHost, remotePort) = srvsock.accept()
print "[%s:%s] connected" % (remoteHost, remotePort)
#do something on the clisock
clisock.close()
if __name__ == "__main__":
tcpServer()
客戶端基本代碼如下:
def tcpClient():
clisock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
clisock.connect(('localhost', 9527))
#I/O on this clisock
#clisock.send("")
#dat = clisock.recv(len)
print dat
if __name__ == "__main__":
tcpClient()
二、UDP方式
Server端
1 建立數據報形式的socket
2 公開一個端口,一邊客戶端連接
3 開始接收數據
客戶端
1 新建一個數據報socket
2 收發數據
Server端基本代碼
def udpServer():
address = ('', 9527)
srvsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
srvsock.bind(address)
#data,addr = srvsock.recvfrom(2048)
if __name__ == "__main__":
udpServer()
客戶端基本代碼
def udpClient():
address = ('localhost', 9527)
clisock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#clisock.sendto(data, address)
if __name__ == "__main__":
udpClient()
三、總結
- TCP與UDP的差異就是在創建socket的時候,一個採用SOCK_STREAM,一個採用SOCK_DGRAM
- TCP的server方式比UDP的server方式多一行代碼listen
- send與sendto,recv與recvfrom的區別,與c語言相同。