python:socket網路程式設計
socket
網路上的兩個程式透過一個雙向的通訊連線實現資料的交換,這個連線的一端稱為一個socket, 又稱為“套接字”。
模組
1 import socket
建立套接字
1 socket.socket([family[, type[, proto]]])
family: 套接字家族可以使AF_UNIX或者AF_INET
type: 套接字型別可以根據是面向連線的還是非連線分為
SOCK_STREAM(基於TCP)
或SOCK_DGRAM(基於UDP)
protocol: 一般不填預設為0.
常用函式
sk.bind(address)
s.bind(address) 將套接字繫結到地址。address地址的格式取決於地址族。在AF_INET下,以元組(host,port)的形式表示地址。
sk.listen(backlog)
開始監聽傳入連線。backlog指定在拒絕連線之前,可以掛起的最大連線數量。
backlog等於5,表示核心已經接到了連線請求,但伺服器還沒有呼叫accept進行處理的連線個數最大為5
這個值不能無限大,因為要在核心中維護連線佇列
sk.accept()
接受連線並返回(conn,address),其中conn是新的套接字物件,可以用來接收和傳送資料。address是連線客戶端的地址。
接收TCP 客戶的連線(阻塞式)等待連線的到來
sk.connect(address)
連線到address處的套接字。一般,address的格式為元組(hostname,port),如果連線出錯,返回socket.error錯誤。
sk.close()
關閉套接字
sk.recv(bufsize[,flag])
接受套接字的資料。資料以字串形式返回,bufsize指定最多可以接收的數量。flag提供有關訊息的其他資訊,通常可以忽略。
sk.send(string[,flag])
將string中的資料傳送到連線的套接字。返回值是要傳送的位元組數量,該數量可能小於string的位元組大小。即:可能未將指定內容全部傳送。
單執行緒通訊
該例項中,只能 client 發一句, server回一句(先啟動server,後啟動client)
server
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # Author: jyroy 4 5 import socket 6 7 if __name__ == '__main__': 8 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #ipv4, TCP 9 sock.bind(('0.0.0.0',5000)) #元組,相當於一個引數10 sock.listen(10) #同時保持是十個人的連線11 conn, addr = sock.accept()12 while True:13 data = conn.recv(1024) #最多1K的資料14 print(data)15 if data == 'bye':16 break17 else:18 msg = raw_input(">>")19 conn.send(msg)20 sock.close()21 print('Bye!!')
client
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # Author: jyroy 4 5 import socket, time 6 7 if __name__ == '__main__': 8 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 9 sock.connect(('localhost',5000))10 while True:11 msg = raw_input(">>")12 if msg == "bye":13 sock.send(msg)14 sock.close()15 break16 else:17 sock.send(msg)18 data = sock.recv(1024)
多執行緒通訊
在該例項中可以自由傳送和接收資訊(先啟動server,後啟動client)
利用threading,多執行緒進行接受訊息和傳送訊息
callback_recv函式負責接受資訊的功能
callback_send函式負責傳送資訊的功能
server
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # Author: jyroy 4 5 import socket, threading, sys 6 7 8 def callback_send(conn): 9 '''10 11 :param sq:12 :return:13 '''14 while True: #為了維持持續的傳送15 msg = raw_input(">>")16 conn.send(msg)17 18 def callback_recv(conn):19 '''20 21 :param sock:22 :return:23 '''24 while True: #為了維持持續的接收25 data = conn.recv(1024)26 print(data)27 28 if __name__ == '__main__':29 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)30 sock.bind(('0.0.0.0',5000)) #元組,相當於一個引數31 sock.listen(10) #同時保持是十個人的連線32 conn, addr = sock.accept()33 34 thread_send = threading.Thread(target=callback_send, args=(conn, ))35 thread_recv = threading.Thread(target=callback_recv, args=(conn, ))36 37 thread_send.start()38 thread_recv.start()39 40 sock.close()
client
#!/usr/bin/env python# -*- coding:utf-8 -*-# Author: jyroyimport socket, time, threading, sysdef callback_send(sock): ''' :param sq: :return: ''' while True: msg = raw_input(">>") sock.send(msg) # if msg in ['bye', 'quit']: # sock.close # breakdef callback_recv(sock): ''' :param sock: :return: ''' while True: data = sock.recv(1024) print(data)if __name__ == '__main__': sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(('localhost',5000)) thread_send = threading.Thread(target=callback_send, args=(sock, )) thread_recv = threading.Thread(target=callback_recv, args=(sock, )) thread_send.start() thread_recv.start() while True: pass sock.close()
效果展示
注意
一定要先server程式啟動,只有server在等待client之後,client才能找到server進行通訊。
我這個只是本機的除錯,要和別人通訊時,把client程式中,把connect的ip地址,從localhost換成要通訊的ip地址
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4369/viewspace-2815300/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python網路-Socket之TCP程式設計(26)PythonTCP程式設計
- Python socket程式設計Python程式設計
- python資源庫——socket網路程式設計Python程式設計
- socket網路程式設計程式設計
- 網路程式設計-socket程式設計
- HUST-計算機網路實驗-socket程式設計計算機網路程式設計
- 網路程式設計之socket程式設計
- 【python socket程式設計】—— 1.初探Python程式設計
- Python 中的 Socket 程式設計(指南)Python程式設計
- python 網路篇(網路程式設計)Python程式設計
- 網路程式設計-Socket通訊程式設計
- 【網路程式設計】socket詳解程式設計
- Linux Socket C語言網路程式設計:TCP SocketLinuxC語言程式設計TCP
- Linux Socket C語言網路程式設計:UDP SocketLinuxC語言程式設計UDP
- Linux Socket C語言網路程式設計:Select SocketLinuxC語言程式設計
- 【python socket程式設計】—— 3.響應Python程式設計
- 初試python的socket程式設計--ftpPython程式設計FTP
- SOCKET程式設計程式設計
- Java 網路程式設計 —— Socket 詳解Java程式設計
- go socket、http網路程式設計demoGoHTTP程式設計
- Python網路程式設計(socket模組、緩衝區、http協議)Python程式設計HTTP協議
- Python中兩種網路程式設計方式:Socket和HTTP協議Python程式設計HTTP協議
- Java Socket程式設計Java程式設計
- socket程式設計(1)程式設計
- Socket程式設計模型程式設計模型
- 玩轉 PHP 網路程式設計全套之 socket stream 程式設計PHP程式設計
- 【Linux網路程式設計】Socket Api函式Linux程式設計API函式
- Socket網路程式設計基礎與實踐:建立高效的網路通訊程式設計
- Socket程式設計基礎程式設計
- socket程式設計實戰程式設計
- UDP協議網路Socket程式設計(java實現C/S通訊案例)UDP協議程式設計Java
- Linux Socket C語言網路程式設計:Pthread Socket [code from GitHub, for study]LinuxC語言程式設計threadGithub
- Linux Socket C語言網路程式設計:Poll Socket [code from GitHub, for study]LinuxC語言程式設計Github
- Linux Socket C語言網路程式設計:Epoll Socket [code from GitHub, for study]LinuxC語言程式設計Github
- Python網路程式設計——程式Python程式設計
- Java:基於TCP協議網路socket程式設計(實現C/S通訊)JavaTCP協議程式設計
- java多執行緒實現TCP網路Socket程式設計(C/S通訊)Java執行緒TCP程式設計
- 基於TCP協議的Socket網路程式設計( )TCP協議程式設計