上一篇文章為:→3.2.5tcp相關(guān)介紹
tcp服務(wù)器
生活中的電話機(jī)
如果想讓別人能更夠打通咱們的電話獲取相應(yīng)服務(wù)的話,需要做一下幾件事情:
- 買個(gè)手機(jī)
- 插上手機(jī)卡
- 設(shè)計(jì)手機(jī)為正常接聽狀態(tài)(即能夠響鈴)
- 靜靜的等著別人撥打
tcp服務(wù)器
如同上面的電話機(jī)過程一樣魄揉,在程序中拭宁,如果想要完成一個(gè)tcp服務(wù)器的功能瓣俯,需要的流程如下:
- socket創(chuàng)建一個(gè)套接字
- bind綁定ip和port
- listen使套接字變?yōu)榭梢员粍?dòng)鏈接
- accept等待客戶端的鏈接
- recv/send接收發(fā)送數(shù)據(jù)
一個(gè)很簡(jiǎn)單的tcp服務(wù)器如下:
#coding=utf-8
from socket import *
# 創(chuàng)建socket
tcpSerSocket = socket(AF_INET, SOCK_STREAM)
# 綁定本地信息
address = ('', 7788)
tcpSerSocket.bind(address)
# 使用socket創(chuàng)建的套接字默認(rèn)的屬性是主動(dòng)的兵怯,使用listen將其變?yōu)楸粍?dòng)的,這樣就可以接收別人的鏈接了
tcpSerSocket.listen(5)
# 如果有新的客戶端來鏈接服務(wù)器驼仪,那么就產(chǎn)生一個(gè)新的套接字專門為這個(gè)客戶端服務(wù)器
# newSocket用來為這個(gè)客戶端服務(wù)
# tcpSerSocket就可以省下來專門等待其他新客戶端的鏈接
newSocket, clientAddr = tcpSerSocket.accept()
# 接收對(duì)方發(fā)送過來的數(shù)據(jù)袜漩,最大接收1024個(gè)字節(jié)
recvData = newSocket.recv(1024)
print '接收到的數(shù)據(jù)為:',recvData
# 發(fā)送一些數(shù)據(jù)到客戶端
newSocket.send("thank you !")
# 關(guān)閉為這個(gè)客戶端服務(wù)的套接字,只要關(guān)閉了毡泻,就意味著為不能再為這個(gè)客戶端服務(wù)了粘优,如果還需要服務(wù),只能再次重新連接
newSocket.close()
# 關(guān)閉監(jiān)聽套接字雹顺,只要這個(gè)套接字關(guān)閉了,就意味著整個(gè)程序不能再接收任何新的客戶端的連接
tcpSerSocket.close()
運(yùn)行流程:
<1>tcp服務(wù)器
day17_TFTP贩挣、TCP編程-00.png
<2>網(wǎng)絡(luò)調(diào)試助手:
day17_TFTP王财、TCP編程-01.jpg
day17_TFTP裕便、TCP編程-02.png