天天看點

socket python執行個體_python socket執行個體

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())#如果發送出去