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

溫馨提示×

溫馨提示×

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

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

如何進行socket通信

發布時間:2021-12-24 16:43:07 來源:億速云 閱讀:129 作者:柒染 欄目:互聯網科技

本篇文章為大家展示了如何進行socket通信,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

一、使用socket實現一對一的簡單通信  

socket就是一個開往網絡應用必備的功能模塊。通過這個模塊我們可以自己寫程序的server端和client端,可以自己定義server端對外提供服務器的ip地址和端口。學會使用這個模塊的之后我們不僅可以開往網絡程序,還可以利用socket模塊開發出端口掃描的程序。

先看一段創建服務器端的代碼

  1. # -*- coding: utf-8 -*-

  2. import socket

  3. import os


  4. #定義服務器端啟動后要綁定的ip和端口

  5. ip_port = ('0.0.0.0',9999)

  6. # 創建socket對象并指定連接的網絡類型和傳輸協議

  7. sk=sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

  8. #綁定ip和端口號

  9. sk.bind(ip_port)

  10. #啟動監聽,并設置最多可以通知連入連接數

  11. sk.listen(5)

  12. #用while使程序一直運行

  13. while True:

  14.     #print 'server waiting...'

  15.     """

  16.     進入accpet阻塞狀態來等待客戶端的連接請求

  17.     保存客戶端的連接狀態和客戶端的地址

  18.     """

  19.     conn,addr = sk.accept()

  20.     print addr

  21.     #如果有客戶端發來請求就每次都只接受1024個字節的內容,注意recv()也是阻塞的

  22.     client_data = conn.recv(10240)

  23.     #打印從客戶端接收到的字符串

  24.     print client_data                ----客戶端ip地址

  25.     #向客戶端發送字符串

  26.     conn.sendall("I`m server")

  27.     #關閉連接

  28.     conn.close()



客戶端代碼

  1. # -*- coding: utf-8 -*-

  2. import socket
    #指定server端的ip地址和端口號
    ip_port = ('127.0.0.1',9999)
    #創建socket實例,參數不填的話就采用ipv4協議通過tcp傳輸
    sk = socket.socket()
    #發起連接到server端
    sk.connect(ip_port)
    #給server端發消息
    sk.sendall("I`m client")
    #發送完成后接收server端的反饋
    server_reply = sk.recv(1024)
    #打印server端反饋的信息
    print server_reply
    #關閉連接
    sk.close()

通過以上兩段代碼的運行,我們就實現了server端與client端的通信

在server端可以到如下運行結果,接收到客戶端請求之后又恢復到了等待狀態

  1. server waiting...

  2. I`m client

  3. server waiting...

在client端也看到了類似的結果,成功接收到了server端的發來的信息之后退出了程序

點擊(此處)折疊或打開

  1. I`m server

拓展:實時解析客戶端的日志文件并發送至服務端保存

server端改寫

  1. # -*- coding: utf-8 -*-

  2. import socket

  3. import os


  4. def save_to_txt(addr,data):

  5.                 path='/tmp/'+addr+'/slow.log'

  6.                 file_path = os.path.split(path)

  7.                 if not os.path.exists( file_path[0] ):

  8.                         os.makedirs( file_path[0] )

  9.                         print '創建目錄成功'

  10.                 if len(data)>0:

  11.                         try:

  12.                                 with open( path.encode('utf-8'),'ab' ) as f:

  13.                                         data = data+"\n"

  14.                                         f.write( data.encode('utf-8') )

  15.                                         

  16.                         except:

  17.                                 print '數據插入失敗'

  18.                 else:

  19.                         print '沒有數據'



  20. #定義服務器端啟動后要綁定的ip和端口

  21. ip_port = ('0.0.0.0',9999)

  22. # 創建socket對象并指定連接的網絡類型和傳輸協議

  23. sk=sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

  24. #綁定ip和端口號

  25. sk.bind(ip_port)

  26. #啟動監聽,并設置最多可以通知連入連接數

  27. sk.listen(5)

  28. #用while使程序一直運行

  29. while True:

  30.     #print 'server waiting...'

  31.     """

  32.     進入accpet阻塞狀態來等待客戶端的連接請求

  33.     保存客戶端的連接狀態和客戶端的地址

  34.     """

  35.     conn,addr = sk.accept()

  36.     print addr

  37.     #如果有客戶端發來請求就每次都只接受1024個字節的內容,注意recv()也是阻塞的

  38.     client_data = conn.recv(10240)

  39.     #打印從客戶端接收到的字符串

  40.     print client_data

  41.     save_to_txt(addr[0],client_data) ----接送并寫入日志文件

  42.     #向客戶端發送字符串

  43.     conn.sendall("I`m server")

  44.     #關閉連接

  45.     conn.close()

client改寫

  1. # -*- coding: utf-8 -*-

  2. import socket

  3. def sendtxt(line):

  4.     ip_port = ('192.168.2.136',9999)

  5.     #創建socket實例,參數不填的話就采用ipv4協議通過tcp傳輸

  6.     sk = socket.socket()

  7.     #發起連接到server端

  8.     sk.connect(ip_port)

  9.     #給server端發消息

  10.     sk.sendall(line)

  11.     #發送完成后接收server端的反饋

  12.     server_reply = sk.recv(10240)

  13.     #打印server端反饋的信息

  14.     print server_reply

  15.     #關閉連接

  16.     sk.close()



  17. import fileinput

  18. import time

  19. import os


  20. target_file = 'log.txt'

  21. init_flag = True  # 初次加載程序


  22. record_count = 0


  23. while True:

  24.         if init_flag:

  25.             #讀取整個文件

  26.             # for eachline in fileinput.input(target_file):

  27.             #    print eachline

  28.             #    record_count += 1

  29.             total_count = os.popen('wc -l %s' % target_file).read().split()[0]

  30.             total_count = int(total_count)

  31.             record_count = total_count


  32.             init_flag = False

  33.         else:

  34.             #如果總行數小于當前行,那么認為文件更新了,從第一行開始讀。

  35.             total_count = os.popen('wc -l %s' % target_file).read().split()[0]

  36.             total_count = int(total_count)

  37.             if total_count < record_count:

  38.                 record_count = 0


  39.             for eachline in fileinput.input(target_file):

  40.                 line_no = fileinput.filelineno()

  41.                 if line_no > record_count:

  42.                    if len(eachline.strip('\n')) > 0:

  43.                        print eachline.strip('\n')

  44.                        sendtxt(eachline.strip('\n')) --發送

  45.                        record_count += 1

  46.                    else:

  47.                        sendtxt('        ')

  48.                        record_count += 1

上述內容就是如何進行socket通信,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

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

AI

修文县| 威宁| 信宜市| 新宾| 达尔| 曲松县| 宜宾市| 溧水县| 万荣县| 资讯| 安多县| 筠连县| 登封市| 昔阳县| 渝北区| 朔州市| 岳阳县| 民和| 灵武市| 松阳县| 蒙自县| 赞皇县| 六安市| 丰县| 大田县| 荥阳市| 界首市| 延津县| 嫩江县| 上虞市| 锡林浩特市| 阿荣旗| 滦南县| 贵州省| 凤山县| 桓台县| 溧阳市| 景洪市| 嘉善县| 广水市| 商洛市|