From:http://blog.csdn.net/rebelqsp/article/details/22109925
參考:http://www.cnblogs.com/hnrainll/archive/2012/10/25/2738094.html
1、Socket 類型
2、Socket 函數
3、socket編程思路
4、Socket編程之服務端代碼:
server端的socket一般流程是這樣:
- 建立一個socket(可以選擇socket類型INET,UNIX等,以及連接方式TCP/UDP)
- 使用bind公開一個端口,使得client可以方便連接
- 設置一個listen隊列的大小
- 進入一個無限循環,在此無限循環中,使用accept函數來等待客戶連接,此函數返回一個新的socket, 對應於客戶端的socket,建立通信信道。對socket的處理一般放在外部單獨的函數中(併發)
- 通過send()/recv()來對socket進行讀寫操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
root@yangrong: / python #
catday5-socket-server.py #!/usr/bin/python import socket #socket模塊 import commands #執行系統命令模塊 HOST = '10.0.0.245' PORT = 50007 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #定義socket類型,網絡通信,TCP s.bind((HOST,PORT)) #套接字綁定的IP與端口 s.listen( 1 ) #開始TCP監聽 while 1 : conn,addr = s.accept() #接受TCP連接,並返回新的套接字與IP地址 print 'Connected
by' ,addr #輸出客戶端的IP地址 while 1 : data = conn.recv( 1024 ) #把接收的數據實例化 cmd_status,cmd_result = commands.getstatusoutput(data) #commands.getstatusoutput執行系統命令(即shell命令),返回兩個結果,第一個是狀態,成功則爲0,第二個是執行成功或失敗的輸出信息 if len (cmd_result.strip()) = = 0 : #如果輸出結果長度爲0,則告訴客戶端完成。此用法針對於創建文件或目錄,創建成功不會有輸出信息 conn.sendall( 'Done.' ) else : conn.sendall(cmd_result) #否則就把結果發給對端(即客戶端) conn.close() #關閉連接 |
5、Socket編程之客戶端代碼:
- 建立一個新的socket
- 使用connect函數與遠程主機獲得連接
- 在此socket上進行I/O操作
1
2
3
4
5
6
7
8
9
10
11
12
13
|
root@yangrong: / python #
catday5-socket-client.py #!/usr/bin/python import socket HOST = '10.0.0.245' PORT = 50007 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #定義socket類型,網絡通信,TCP s.connect((HOST,PORT)) #要連接的IP與端口 while 1 : cmd = raw_input ( "Please
input cmd:" ) #與人交互,輸入命令 s.sendall(cmd) #把命令發送給對端 data = s.recv( 1024 ) #把接收的數據定義爲變量 print data #輸出變量 s.close() #關閉連接 |
- 頂
- 12
- 踩