1. 程式人生 > >python之socket模塊詳解--小白博客

python之socket模塊詳解--小白博客

電話 機器 -- 創建服務 rec bsp 基本 start read

主要是創建一個服務端,在創建服務端的時候,主要步驟如下:
創建socket對象socket——》綁定IP地址和端口bind——》監聽listen——》得到請求accept——》接收請求recv——》發送信息send——》關閉close
客戶端代碼就是連接服務器,接收和發送消息,具體流程如下:
創建socket對象socket——》connet連接服務器——》獲取消息recv——》發送消息send——關閉close

1、服務端代碼

#服務器端
import socket
import subprocess
import threading
server = socket.socket()
server.bind((‘‘, 8888))
server.listen(5)
print(等待電話.....)
conn, addr = server.accept()
print(電話來了......)
def recv():
    while True:
        data = conn.recv(10240)
        print(data.decode(
utf-8)) def send(): while True: data = input(===>:) conn.send(data.encode(utf-8)) t1 = threading.Thread(target=recv) t2 = threading.Thread(target=send) t1.start() t2.start()

2、客戶端代碼

#客戶端
import socket
import threading
client = socket.socket()
client.connect((
localhost, 8888)) def send(): while True: info = input(===>:) client.send(info.encode(utf-8)) def recv(): while True: data = client.recv(1024) print(data.decode(utf-8)) t1 = threading.Thread(target=send) t2 = threading.Thread(target=recv) t1.start() t2.start()

3、 基本描述

在使用socket模塊的時候,創建對象一般是使用如下的代碼:

s = socket.socket()

在使用默認值的時候,表示創建的是TCP 的socket,地址家族表示為socket.AF_INET,socket類型默認值為socket.SOCK_STREAM表示為TCP的,而UDP的為socket.SOCK_DGRAM,表示為數據包

綁定的代碼如下:

s.bind((IP,port))

註意在綁定的時候,參數只有一個表示為元組tuple,其中第一個元素為ip地址或者是hostname,第二個參數為port端口號,也就是開始監聽哪個IP地址的哪個端口

監聽的代碼如下:

s.listen(5)
其中的參數為整數,5表示阻塞五個連接,實際上,,經過測試,十幾個都沒問題,主要是阻塞式的,當有一個連接上的時候,那麽其他的都不會連接上,只有在第一個推出的時候,其他的才能進行連接,開始還以為是可以同時連接五個,然後測試下,發現不行,無論是同一個服務器上還是不同的機器上,是不能同時進行連接的,也就是所謂的阻塞式。

被動接受請求的代碼如下:

conn,addres = s.accept()
返回的是一個元組,也就是在接受客戶端的連接,返回的第一個元素是一個socket對象,可以認為是客戶端的socket對象,address表示為客戶端的地址,其實這個也就使用和客戶端進行通信的。

客戶端連接服務器端的代碼如下:

s.connect((ip,port))
參數為服務器的IP地址和服務器監聽的端口。

發送消息的代碼如下

conn.send(‘string is send‘)
conn.sendall(‘send‘)
l兩個都是用來發送消息的,區別就是sendall盡量一次發送,而send的話主要看接收能力,如果超出範圍的話,那麽會進行發送兩次進行發送

接收消息的代碼如下:

conn.recv(1024)

主要方法是recv方法表示接收消息,最多接收的字節數為1024,那麽多余的字符將會在下次接收的過程中進行接收。

4、運行客服端和服務端

在運行客戶端和服務端代碼之後,發現是可以交互的,也就是客戶端和服務端進行說話,就想其他的一些交流軟件一樣,註意,在上述的代碼中還存在一些bug

python之socket模塊詳解--小白博客