【Python】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 -*-
-
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端可以到如下執行結果,接收到客戶端請求之後又恢復到了等待狀態
-
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()
-
# -*- 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
參考:
http://830909.blog.51cto.com/8311014/1723348
http://youzao.blog.51cto.com/3946111/1255882
http://www.cnblogs.com/wowoo1121/p/5381971.html
http://blog.csdn.net/u012063703/article/details/46007299
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29096438/viewspace-2147022/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- socket通訊
- Java 和 Python 之間的 Socket 通訊JavaPython
- Android Socket 通訊Android
- socket.IO通訊
- 程式間通訊(Socket)
- socket通訊的建立
- 簡單的Socket通訊
- socket.io通訊原理
- Android Socket連線,使用Socket進行通訊(Android)Android
- koa-socket即時通訊
- 溫故之.NET Socket通訊
- socket 完成簡單的通訊
- Linux學習/TCP Socket通訊LinuxTCP
- Socket.IO IM通訊元件元件
- Fanuc Socket Message通訊第一講
- 網路程式設計-Socket通訊程式設計
- Java基礎(Socket通訊和NIO)Java
- Socket搭建即時通訊伺服器伺服器
- 14.8 Socket 一收一發通訊
- Java的Socket通訊簡單例項Java單例
- 手把手教你 Socket 通訊(TCP/IP)TCP
- 【Spring Boot】整合Netty Socket.IO通訊框架Spring BootNetty框架
- 在 Laravel 中使用 Workerman 進行 socket 通訊Laravel
- IO建立Socket通訊中慎用BufferReader中的readLine()
- JAVA - 基於Socket的多執行緒通訊Java執行緒
- c#實現最簡單的socket通訊C#
- Android Wifi熱點 資料傳輸Socket 通訊AndroidWiFi
- 什麼時候採用socket通訊,什麼時候採用http通訊HTTP
- Thinking in Java--使用NIO實現非阻塞Socket通訊ThinkingJava
- C# 實現socket通訊程式(伺服器端)C#伺服器
- java socket 通訊socketServer 服務端多執行緒JavaServer服務端執行緒
- Windows Socket程式設計精華《TCP通訊伺服器》Windows程式設計TCP伺服器
- SOCKET通訊中TCP、UDP資料包大小的確定TCPUDP
- python實現兩臺不同主機之間進行通訊(客戶端和服務端)——SocketPython客戶端服務端
- python socket例項Python
- Python3 SocketPython
- python中的訊號通訊 blinkerPython
- JS實時通訊三把斧系列之二: socket.ioJS
- python UDP套接字通訊PythonUDP