您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何進行socket通信,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
一、使用socket實現一對一的簡單通信
socket就是一個開往網絡應用必備的功能模塊。通過這個模塊我們可以自己寫程序的server端和client端,可以自己定義server端對外提供服務器的ip地址和端口。學會使用這個模塊的之后我們不僅可以開往網絡程序,還可以利用socket模塊開發出端口掃描的程序。
先看一段創建服務器端的代碼
# -*- coding: utf-8 -*-
import socket
import os
#定義服務器端啟動后要綁定的ip和端口
ip_port = ('0.0.0.0',9999)
# 創建socket對象并指定連接的網絡類型和傳輸協議
sk=sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#綁定ip和端口號
sk.bind(ip_port)
#啟動監聽,并設置最多可以通知連入連接數
sk.listen(5)
#用while使程序一直運行
while True:
#print 'server waiting...'
"""
進入accpet阻塞狀態來等待客戶端的連接請求
保存客戶端的連接狀態和客戶端的地址
"""
conn,addr = sk.accept()
print addr
#如果有客戶端發來請求就每次都只接受1024個字節的內容,注意recv()也是阻塞的
client_data = conn.recv(10240)
#打印從客戶端接收到的字符串
print client_data ----客戶端ip地址
#向客戶端發送字符串
conn.sendall("I`m server")
#關閉連接
conn.close()
客戶端代碼
# -*- coding: utf-8 -*-
通過以上兩段代碼的運行,我們就實現了server端與client端的通信
在server端可以到如下運行結果,接收到客戶端請求之后又恢復到了等待狀態
server waiting...
I`m client
server waiting...
在client端也看到了類似的結果,成功接收到了server端的發來的信息之后退出了程序
點擊(此處)折疊或打開
I`m server
server端改寫
# -*- coding: utf-8 -*-
import socket
import os
def save_to_txt(addr,data):
path='/tmp/'+addr+'/slow.log'
file_path = os.path.split(path)
if not os.path.exists( file_path[0] ):
os.makedirs( file_path[0] )
print '創建目錄成功'
if len(data)>0:
try:
with open( path.encode('utf-8'),'ab' ) as f:
data = data+"\n"
f.write( data.encode('utf-8') )
except:
print '數據插入失敗'
else:
print '沒有數據'
#定義服務器端啟動后要綁定的ip和端口
ip_port = ('0.0.0.0',9999)
# 創建socket對象并指定連接的網絡類型和傳輸協議
sk=sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#綁定ip和端口號
sk.bind(ip_port)
#啟動監聽,并設置最多可以通知連入連接數
sk.listen(5)
#用while使程序一直運行
while True:
#print 'server waiting...'
"""
進入accpet阻塞狀態來等待客戶端的連接請求
保存客戶端的連接狀態和客戶端的地址
"""
conn,addr = sk.accept()
print addr
#如果有客戶端發來請求就每次都只接受1024個字節的內容,注意recv()也是阻塞的
client_data = conn.recv(10240)
#打印從客戶端接收到的字符串
print client_data
save_to_txt(addr[0],client_data) ----接送并寫入日志文件
#向客戶端發送字符串
conn.sendall("I`m server")
#關閉連接
conn.close()
client改寫
# -*- coding: utf-8 -*-
import socket
def sendtxt(line):
ip_port = ('192.168.2.136',9999)
#創建socket實例,參數不填的話就采用ipv4協議通過tcp傳輸
sk = socket.socket()
#發起連接到server端
sk.connect(ip_port)
#給server端發消息
sk.sendall(line)
#發送完成后接收server端的反饋
server_reply = sk.recv(10240)
#打印server端反饋的信息
print server_reply
#關閉連接
sk.close()
import fileinput
import time
import os
target_file = 'log.txt'
init_flag = True # 初次加載程序
record_count = 0
while True:
if init_flag:
#讀取整個文件
# for eachline in fileinput.input(target_file):
# print eachline
# record_count += 1
total_count = os.popen('wc -l %s' % target_file).read().split()[0]
total_count = int(total_count)
record_count = total_count
init_flag = False
else:
#如果總行數小于當前行,那么認為文件更新了,從第一行開始讀。
total_count = os.popen('wc -l %s' % target_file).read().split()[0]
total_count = int(total_count)
if total_count < record_count:
record_count = 0
for eachline in fileinput.input(target_file):
line_no = fileinput.filelineno()
if line_no > record_count:
if len(eachline.strip('\n')) > 0:
print eachline.strip('\n')
sendtxt(eachline.strip('\n')) --發送
record_count += 1
else:
sendtxt(' ')
record_count += 1
上述內容就是如何進行socket通信,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。