python socket程式設計

2022-03-25 17:16:56 字數 3762 閱讀 3239

python 編寫server的步驟:

1. 第一步是建立socket物件,呼叫socket建構函式。如:

socket = socket.socket( family, type )

family引數代表位址家族,可為af_inet或af_unix。af_inet家族包括af_inet和af_inet6,用於網路間通訊;af_unix家族用於同一臺機器上的程序間通訊。

type引數代表套接字型別,包括sock_stream(流套接字)和sock_dgram(資料報套接字)。

host若為本地計算機,可以給出ip位址,也可以直接給」「

host = 」「

port = 50000

addr = (host,port)

socket.bind( addr )

由af_inet所建立的套接字,address位址必須是乙個雙元素元組,格式是(host,port)。host代表主機,port代表埠號。如果埠號正在使用、主機名不正確或埠已被保留,bind方法將引發socket.error異常。

3. 第三步是使用socket套接字的listen方法接收連線請求。

socket.listen( backlog )

backlog指定最多允許多少個客戶連線到伺服器。它的值至少為1。收到連線請求後,這些請求需要排隊,如果佇列滿,就拒絕請求。

4. 第四步是伺服器套接字通過socket的accept方法等待客戶請求乙個連線。

connection, address = socket.accept()

呼叫accept方法時,socket會時入「waiting」狀態。客戶請求連線時,方法建立連線並返回伺服器。accept方法返回乙個含有兩個元素的元組(connection,address)。第乙個元素connection是新的socket物件,伺服器必須通過它與客戶通訊;第二個元素address是客戶的ip位址。

5. 第五步是處理階段,伺服器和客戶端通過send和recv方法通訊(傳輸資料)。

bufsiz = 1024

data = connection.recv(bufsiz)

伺服器使用recv方法從客戶接收資訊,呼叫recv 時,伺服器必須指定乙個整數,它對應於可通過本次方法呼叫來接收的最大資料量。recv方法在接收資料時會進入「blocked」狀態,最後返回乙個字串,用它表示收到的資料。如果傳送的資料量超過了recv所允許的,資料會被截短。多餘的資料將緩衝於接收端。以後呼叫recv時,多餘的資料會從緩衝區刪除(以及自上次呼叫recv以來,客戶可能傳送的其它任何資料)。

connection.send(data + "received")

伺服器呼叫send,並採用字串形式向客戶傳送資訊,send方法返回已傳送的字元個數。

6. 傳輸結束,伺服器呼叫socket的close方法關閉連線。

python編寫client的步驟:

1. 建立乙個socket以連線伺服器:socket = socket.socket( family, type )

2.使用socket的connect方法連線伺服器。對於af_inet家族,連線格式如下:

host = 」192.168.1.102「

port = 50000

addr = (host,port)

socket.connect(addr  )

host代表伺服器主機名或ip,port代表伺服器程序所繫結的埠號。如連線成功,客戶就可通過套接字與伺服器通訊,如果連線失敗,會引發socket.error異常。

3. 處理階段,客戶和伺服器將通過send方法和recv方法通訊。

send_data = raw_input('>')

socket.send(data)

recv_data = socket.recv()

4. 傳輸結束,客戶通過呼叫socket的close方法關閉連線。

socket.close()

下面給個簡單的例子:

server.py

#coding=utf-8

from socket import *

import time

host = ""

port = 50000

bufsiz = 1024

addr = (host,port)

# 套接字定義方法:socket(socket_family,socket_type,protocol = 0)

# 套接字有兩種:基於檔案的af_unix(af_local為公升級版)和基於網路的af_inet

# 每一種套接字都可以分為面向連線的sock_stream、無連線的sock_dgram

tcpserversock = socket(af_inet,sock_stream)

# 繫結位址(主機名,埠)到套接字

tcpserversock.bind(addr)

# listen()表示最多允許多少個連線進來,而後的將被拒絕掉。

tcpserversock.listen(5)

while true:

print "waiting for connection..."

# accept() -> (socket object, address info) wait for an incoming connection.

# return a new socket representing the connection, and the address of the client.

# for ip sockets, the address info is a pair (hostaddr, port).

tcpclientsock,addr = tcpserversock.accept()

# tcpclientsock.settimeout(5)

print "...connected from:",addr

thistime = time.strftime('%y-%m-%d %h:%m:%s',time.localtime())

while true:

# recv(buflen[, flags]) -- receive data

data = tcpclientsock.recv(bufsiz)

if not data:

break

print (thistime + " receive:" + data + "")

tcpclientsock.send(thistime + ':' + data)

if data == '':

tcpclientsock.close()

tcpserversock.close()

client.py

from socket import *

host = "127.0.0.1"

port = 50000

bufsize = 1024

addr = (host,port)

socketclient = socket(af_inet,sock_stream)

socketclient.connect(addr)

while true:

data = raw_input('>')

if not data:

break

socketclient.send(data)

data = socketclient.recv(bufsize)

if not data:

break

print data

socketclient.close()

Python Socket 程式設計

client import socket,sys if name main 處理引數 argv sys.argv if len argv 3 or len argv 2 and argv 1 print useage argv 0 sys.exit 0 host argv 1 server ip位址...

python socket程式設計

python 編寫server的步驟 1.第一步是建立socket物件。呼叫socket建構函式。如 socket socket.socket family,type family引數代表位址家族,可為af inet或af unix。af inet家族包括internet位址,af unix家族用於...

python socket程式設計

客戶端 author lenovo fromsocketimport host localhost port 2157 bufsize 1024 addr host,port tcpclient socket af inet,sock stream tcpclient.connect addr wh...