亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Python中利用socket發送信息

發布時間:2021-04-08 17:29:43 來源:億速云 閱讀:207 作者:Leah 欄目:開發技術

本篇文章為大家展示了怎么在Python中利用socket發送信息,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

server端(單線程)

# -*- coding: cp936 -*-
'''''
建立一個python server,監聽指定端口,
如果該端口被遠程連接訪問,則獲取遠程連接,然后接收數據,
并且做出相應反饋。
'''
if __name__=="__main__":
    import socket
  print "Server is starting"
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.bind(('localhost', 8001)) #配置soket,綁定IP地址和端口號
    sock.listen(5) #設置最大允許連接數,各連接和server的通信遵循FIFO原則
    print "Server is listenting port 8001, with max connection 5"
    while True: #循環輪詢socket狀態,等待訪問
        connection,address = sock.accept()
        try:
            connection.settimeout(50)
            #獲得一個連接,然后開始循環處理這個連接發送的信息
            '''''
            如果server要同時處理多個連接,則下面的語句塊應該用多線程來處理,
            否則server就始終在下面這個while語句塊里被第一個連接所占用,
            無法去掃描其他新連接了,但多線程會影響代碼結構,所以記得在連接數大于1時
            下面的語句要改為多線程即可。
            '''
            while True:
                buf = connection.recv(1024)
                print "Get value " +buf
                if buf == '1':
                  print "send welcome"
                  connection.send('welcome to server!')
                elif buf!='0':
                  connection.send('please go out!')
                  print "send refuse"
                else:
                  print "close"
                  break #退出連接監聽循環
        except socket.timeout: #如果建立連接后,該連接在設定的時間內無數據發來,則time out
             print 'time out'
        print "closing one connection" #當一個連接監聽循環退出后,連接可以關掉
        connection.close()

client端,每隔3秒輪番發送不同的數據給server:

if __name__=="__main__":
    import socket
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect(('localhost', 8001))
    import time
    flag = '1'
    while True:
        time.sleep(3)
        print 'send to server with value: '+ flag
        sock.send(flag)
        print sock.recv(1024)
        flag = (flag=='1') and '2' or '1' #change to another type of value each time
    sock.close()

執行上面兩段代碼后,可以得到如下結果:

先執行server.py:

C:\Users\YanBo>D:\server.py
Server is starting
Server is listenting port 8001, with max connection 5

執行client后:

C:\Users\YanBo>D:\client.py
send to server with value: 1
welcome to server!
send to server with value: 2
please go out!
send to server with value: 1
welcome to server!
send to server with value: 2
please go out!
.....

server則相應輸出:

Get value 1
send welcome
Get value 2
send refuse
.....

如果在linux下,用

$ lsof -i:8001

則可以列出正在執行的server和client進程,因為他們占用了端口8001

yanbo@yanbo-linux64-01:~$ lsof -i:8001
COMMAND PID USER  FD  TYPE DEVICE SIZE/OFF NODE NAME
python 2413 yanbo  3u IPv4 12907   0t0 TCP localhost:8001 (LISTEN)
python 2413 yanbo  4u IPv4 12910   0t0 TCP localhost:8001->localhost:38609 (ESTABLISHED)
python 2469 yanbo  3u IPv4 12222   0t0 TCP localhost:38609->localhost:8001 (ESTABLISHED)

上述內容就是怎么在Python中利用socket發送信息,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

舞阳县| 恩平市| 巩义市| 集安市| 建昌县| 顺平县| 遵义市| 周口市| 阿尔山市| 东阳市| 永善县| 阳信县| 兴隆县| 洛浦县| 九台市| 缙云县| 麻栗坡县| 黑河市| 建宁县| 遵义市| 黄陵县| 张家口市| 巴南区| 镇雄县| 永昌县| 东乌珠穆沁旗| 遂川县| 石台县| 鞍山市| 赤峰市| 镇坪县| 荣昌县| 丰镇市| 肃南| 绥德县| 涪陵区| 华容县| 凉城县| 岑巩县| 宿州市| 忻城县|