1、伺服器就是一系列硬體或軟體,為乙個或多個客戶端(服務的使用者)提供所需的「服務」。它存在唯一目的就是等待客戶端的請求,並響應它們(提供服務),然後等待更多請求。
2、客戶端/伺服器架構既可以應用於計算機硬體,也可以應用於計算機軟體。
3、在伺服器響應客戶端之前,首先會建立乙個通訊節點,它能夠使伺服器監聽請求。
一、套接字:通訊端點
1、套接字
套接字是計算機網路資料結構,它體現了上節中所描述的「通訊端點」的概念。在任何型別的通訊開始之前,網路應用程式必須建立套接字。
有兩種型別的套接字:基於檔案和面向網路的。
如果乙個套接字像乙個**插孔-允許通訊的一些基礎設施,那麼主機名和埠號就像區號和**號碼的組合。有效的埠號範圍為0-65535(小於1024的埠號預留給了系統)
3、面向連線的套接字和與無連線的套接字
面向連線,在進行通訊之前必須建立乙個連線。實現這種連線型別主要協議是tcp(傳輸控制協議)
無連線,在通訊之前並不需要建立連線。主要協議是udp(使用者資料報協議)
二、python中的網路程式設計
1、socket()模組函式
為建立tcp/ip套接字:tcpsock = socket.socket(socket.af_inef,socket.sock_stream)
建立udp/ip套接字:udpsock = socket.socket(socket.af_inet,socket.sock_dgram)
3、建立tcp伺服器
1234
5678
9101112
1314
1516
1718
1920
2122
2324
2526
2728
2930
3132
ss = socket() #建立伺服器套接字
ss.bind() #套接字與位址繫結
ss.listen() #監聽連線
inf_loop: #伺服器無限迴圈
cs = ss.accept() #接收客戶端連線
comm_loop: #通訊迴圈
cs.recv()/cs.send() #對話(接收、傳送)
cs.close() #關閉客戶端套接字
ss.close() #關閉伺服器套接字(可選)
#!/usr/bin/env python
#tcp時間戳伺服器
from socket import *
from time import ctime
host = ''
port =
21567
bufsiz =
1024
addr = (host,port)
tcpsersock = socket(af_inet,sock_stream)
tcpsersock.bind(addr)
tcpsersock.listen(5)
while
true:
print(
'waiting for connecting...'
)tcpclisock, addr = tcpsersock.accept()
print(
'...connected from:'
,addr)
while true:
data = tcpclisock.recv(bufsiz)
if not
data:
break
tcpclisock.send(
'[%s] %s'
% (bytes(ctime(),
'utf-8'
),data))
tcpclisock.close()
tcpsersock.close()
4、建立tcp客戶端
12345
cs = socket()
cs.connect()
comm_loop:
cs.send()/cs.recv()
cs.close()12
3456
78910
1112
1314
1516
1718
19#!/usr/bin/env python
#tcp時間戳客戶端
from socket import *
host = '127.0.0.1'
port =
21567
bufsiz =
1024
addr = (host,port)
tcpclisock = socket(af_inet,sock_stream)
tcpclisock.connect(addr)
while
true:
data = input(
'> '
)if
notdata:
break
tcpclisock.send(data)
data = tcpclisock.recv(bufsiz)
if not
data:
break
print(data.decode(
'utf-8'
))tcpclisock.close()
5、建立udp伺服器
12345
ss = socket()
ss.bind()
inf_loop:
cs = ss.recvfrom()/ss.sendto()
ss.close()12
3456
78910
1112
1314
1516
#!/usr/bin/env python
#udp時間戳伺服器
from socket import *
from time import ctime
host = ''
port =
21567
bufsiz =
1024
addr = (host,port)
udpsersock = socket(af_inet,sock_dgram)
udpsersock.bind(addr)
while
true:
print(
'waiting for message...'
)data, addr=udpsersock.recvfrom(bufsiz)
udpsersock.sendto(
'[%s] %s'
% (ctime(),data),addr)
print(
'...received from and returned to:'
,addr)
udpsersock.close()
6、建立udp客戶端
1234cs = socket()
comm_loop:
cs.send()/cs.recvfrom()
cs.close()12
3456
78910
1112
1314
1516
1718
#!/usr/bin/env python
#udp時間戳客戶端
from socket import *
host = 'localhost'
port =
21567
bufsiz =
1024
addr = (host,port)
udpclisock = socket(af_inet,sock_dgram)
while
true:
data = input(
'> '
)if
notdata:
break
udpclisock.sendto(data,addr)
data, addr=udpclisock.recvfrom(bufsiz)
if not
data:
break
print(data)
udpclisock.close()
python網路程式設計 TCP網路程式設計
tcp程式設計 客戶端 import socket 1 套接字 tcp socket socket.socket socket.af inet,socket.sock stream 2 建立鏈結 tcp socket.connect 172.27.35.1 8080 3 傳送資訊 tcp socke...
python 網路程式設計
今天晚上學習了一下python的網路程式設計,實現了client向server傳送資料,server反饋資訊 python 3.3 版本 server from socket import class tcpserver object def init self,serverport self.se...
python網路程式設計
網路通訊是計算機之間的程序之間的通訊。tcp程式設計 tcp連線建立是雙向通道,客戶端與服務端都可以給對方傳送資料。建立tcp連線時,主動發起連線的叫客戶端,被動響應連線的叫服務端。建立乙個tcp的socket連線 用socket family,type 建立套接字獲得socket物件。family...