1.用戶端向服務端發送
#coding:utf-8
'''用戶端'''
import socket
khd=socket.socket() #聲明socket類型,同時生産socket連接配接對象
khd.connect(('localhost',2345)) #連接配接
khd.send('應用')
data=khd.recv(1024)
print("recv:",data)
khd.close()
#coding:utf-8
'''服務端'''
import socket
fuwud=socket.socket() #()内不寫東西的話,代表第一個位址簇AF.INET
fuwud.bind(('localhost',2345)) #綁定要監聽端口
fuwud.listen(5) #監聽
print"等待中。。。。"
conn,addr=fuwud.accept() #等資料進來
#conn就是用戶端連過來而在服務端為其生成的一個連接配接執行個體,連接配接标志。addr對方的位址addr對方的位址
print conn,addr
print'開始了!'
data=conn.recv(1024)
print "recv:",data
conn.send(data.upper())
fuwud.close()
先運作服務端再運作用戶端
結果:
等待中。。。。
('127.0.0.1', 64335) 這裡的端口64335是随機的。
開始了!
recv: 應用
注:khd.send(b'holle,world') 這裡的byci隻解釋acssii的資料,發送中文不用添加b
2.伺服器接受用戶端發來的4次消息後,自動斷開。
#coding:utf-8
'''服務端'''
import socket
fuwud=socket.socket()
fuwud.bind(('localhost',2345)) #綁定要監聽端口
fuwud.listen(5) #監聽
print"等待中。。。。"
while True:
conn,addr=fuwud.accept() #等資料進來
#conn就是用戶端連過來而在服務端為其生成的一個連接配接執行個體,連接配接标志。addr對方的位址
print conn,addr
print'開始了!'
c=0
while True:
data=conn.recv(1024)
print "recv:",data
conn.send(data.upper())
if c>4: #從用戶端接受4次 ,伺服器端自動斷開。
break
c=c+1
print c
fuwud.close()
#coding:utf-8
'''用戶端'''
import socket
khd=socket.socket() #聲明socket類型,同時生産socket連接配接對象
khd.connect(('localhost',2345)) #連接配接
while True:
khd_data=raw_input('>>:')
if len(khd_data) == 0:continue #send不能發送空值
khd.send(khd_data)
data=khd.recv(1024)
print("recv:",data)
khd.close()
3.伺服器端可以實作接受多個線程的資訊。
#coding:utf-8
'''服務端'''
import socket
fuwud=socket.socket()
fuwud.bind(('localhost',2345)) #綁定要監聽端口
fuwud.listen(5) #監聽
print"等待中。。。。"
while True:
conn,addr=fuwud.accept() #等資料進來
#conn就是用戶端連過來而在服務端為其生成的一個連接配接執行個體,連接配接标志。addr對方的位址
print conn,addr
print'開始了!'
c=0
while True:
data=conn.recv(1024)
print "recv:",data
conn.send(data.upper())
c=c+1
if c>4:
break
print c
fuwud.close()
運作多個用戶端。
#coding:utf-8
'''用戶端'''
import socket
khd=socket.socket() #聲明socket類型,同時生産socket連接配接對象
khd.connect(('localhost',2345)) #連接配接
while True:
khd_data=raw_input('>>:')
if len(khd_data) == 0:continue
khd.send(khd_data)
data=khd.recv(1024)
print("recv:",data)
khd.close()
4.伺服器、用戶端實作系統操作
#coding:utf-8
'''服務端'''
import os
import socket
fuwud=socket.socket()
fuwud.bind(('localhost',2345)) #綁定要監聽端口
fuwud.listen(5) #監聽
print"等待中。。。。"
while True:
conn,addr=fuwud.accept() #等資料進來
#conn就是用戶端連過來而在服務端為其生成的一個連接配接執行個體,連接配接标志。addr對方的位址
print conn,addr
print'開始了!'
c=0
while True:
data=conn.recv(1024)
print "recv:",data
res=os.popen(data).read()
conn.send(res)
c=c+1
if c>4:
break
print c
fuwud.close()
#coding:utf-8
'''用戶端'''
import socket
khd=socket.socket() #聲明socket類型,同時生産socket連接配接對象
khd.connect(('localhost',2345)) #連接配接
while True:
khd_data=raw_input('>>:')
if len(khd_data) == 0:continue
khd.send(khd_data)
data=khd.recv(1024)
print("recv:",data)
khd.close()
5.服務端:
sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)
參數一:位址簇
socket.AF_INET IPv4(預設) socket.AF_INET6 IPv6
socket.AF_UNIX 隻能夠用于單一的Unix系統程序間通信
參數二:類型
socket.SOCK_STREAM 流式socket , for TCP (預設) socket.SOCK_DGRAM 資料報式socket , for UDP
socket.SOCK_RAW 原始套接字,普通的套接字無法處理ICMP、IGMP等網絡封包,而SOCK_RAW可以;其次,SOCK_RAW也可以處理特殊的IPv4封包;此外,利用原始套接字,可以通過IP_HDRINCL套接字選項由使用者構造IP頭。 socket.SOCK_RDM 是一種可靠的UDP形式,即保證傳遞資料報但不保證順序。SOCK_RAM用來提供對原始協定的低級通路,在需要執行某些特殊操作時使用,如發送ICMP封包。SOCK_RAM通常僅限于進階使用者或管理者運作的程式使用。 socket.SOCK_SEQPACKET 可靠的連續資料包服務
參數三:協定
0 (預設)與特定的位址家族相關的協定,如果是 0 ,則系統就會根據位址格式和套接類别,自動選擇一個合适的協定
具體參考:http://www.cnblogs.com/wupeiqi/articles/5040823.html
import socket
server=socket.socket(AF_INET,sock.SOCK_STREAM)
server.bind(localhost,9999) 綁定端口監聽
server.listen()
while true: #可以接受新的連結
conn,addr=server.accept()#阻塞
while true:
data=conn.recv(8192)#recv預設是阻塞的
if not data:
break #避免用戶端斷開,conn.recv收到的是空資料
conn.send(data.upper())#如果發送出去