python中的socket模組

2022-04-04 06:52:46 字數 2806 閱讀 5667

熟悉了一下python的socket模組,感覺還是有點好玩的,不過坑也也是不少的。

1、伺服器端**

#!/usr/bin/env python

import socket

host='192.168.1.60'

port=55555

s = socket.socket()

s.bind((host,port))

s.listen(10)

while true:

conn,addres = s.accept()

conn.send('hello')

while true:

data = conn.recv(1024)

print data,addres

if data =='exit':

print 'byebye'

break

if not data.strip():

continue

flag = true

while flag:

info = raw_input('answer:>>')

if info.strip():

flag=false

conn.sendall(' %s' % info)

conn.close()

主要是建立乙個服務端,在建立服務端的時候,主要步驟如下:

建立socket物件socket——》繫結ip位址和埠bind——》監聽listen——》得到請求accept——》接收請求recv——》傳送資訊send——》關閉close

2、 客戶端**

#!/usr/bin/env python

import socket

host='192.168.1.60'

port=55555

s = socket.socket()

s.connect((host,port))

while true:

data = s.recv(1024)

if data.strip():

print 'replay is ',data

flag = true

while flag:

kel = raw_input('question :>>')

print 'raw_input values : %r' % kel

if kel.strip():

flag=false

s.sendall(kel)

if kel == 'exit':

break

s.close()

客戶端**就是連線伺服器,接收和傳送訊息,具體流程如下:

建立socket物件socket——》connet連線伺服器——》獲取訊息recv——》傳送訊息send——關閉close

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,並不是指異常處理

在上述的**中,主要的思路就是如果客戶端輸入為空,那麼會一直輸入,除非輸入exit,那麼退出,輸入了字元之後,才會傳送到服務端

如果服務端回覆為空,那麼會要求服務端一直輸入,輸入字元後傳送給客戶端,如果客戶端退出,那麼斷開連線,繼續監聽。

Socket的Server Client模型的程式

開發原理 伺服器 使用socket監聽指定的埠 埠可以隨意指定,但是因為有的作業系統規定1024之前的埠規系統所用,所以我們還是給作業系統讓位,取大於1024的埠 等待客戶連線請求,客戶連線之後,伺服器與客戶端的會話產生,在完成會話之後,關閉連線。客戶端 使用socket對網路上某乙個伺服器的某一埠...

python怎麼取模 Python中的取模運算方法

所謂取模運算,就是計算兩個數相除之後的餘數,符號是 如a b就是計算a除以b的餘數。用數學語言來描述,就是如果存在整數n和m,其中0 m b,使得a n b m,那麼a b a n b m.取模運算的兩個運算元都必須是整數,可以是負整數,但是b不可以是0,因為被除數不能為0嘛。當a和b中存在負整數時...

Python中的numpy linalg模組

線性代數 numpy.linalg模組包含線性代數的函式。使用這個模組,可以計算逆矩陣 求特徵值 解線性方程組以及求解行列式等。import numpy as np 1.計算逆矩陣 建立矩陣 a np.mat 0 1 2 1 0 3 4 3 8 print a 0 1 2 1 0 3 4 3 8 使...