91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

如何進行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

湛江市| 通山县| 宁城县| 靖远县| 丰城市| 吉林市| 安徽省| 额尔古纳市| 兰溪市| 车致| 柘荣县| 巢湖市| 积石山| 平塘县| 孙吴县| 遂宁市| 镇巴县| 南开区| 东宁县| 萍乡市| 荔浦县| 衡山县| 双峰县| 柳江县| 宁都县| 铜山县| 秦皇岛市| 海城市| 通州区| 波密县| 宾阳县| 长岭县| 彩票| 长沙县| 平舆县| 保定市| 武胜县| 武宁县| 淳化县| 辛集市| 临清市|