日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python的socket模块_python模块:socket模块

發布時間:2024/7/23 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python的socket模块_python模块:socket模块 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.Socket類型

socket(family,type[,protocal])???? 使用給定的地址族,套接字類型,協議編號(默認是0)來創建套接字

socket類型

描述

socket.AF_UNIX

只能夠用于單一的Unix系統進程間通信

socket.AF_INET

服務器之間網絡通信

socket.AF_INET6

IPv6

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_SEQPACKET

可靠的連續數據包服務

創建UDP Socket

s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

2.Socket函數

socket函數(服務器)

描述

s.bind(address)

將套接字綁定到地址,?在AF_INET下,以元組(host,port)的形式表示地址.

s.listen(backlog)

開始監聽TCP傳入連接.backlog指定在拒絕連接之前,操作系統可以掛起的最大連接數量.該值至少為1,大部分應用程序設為5就可以了.

s.accept()

接受TCP連接并返回(conn,address),其中conn是新的套接字對象,可以用來接收和發送數據.address是連接客戶端的地址.

socket函數(客戶端)

s.connect(address)

連接到address處的套接字.一般address的格式為元組(hostname,port),如果連接出錯,返回socket.error錯誤.

s.connect_ex(adddress)

功能與connect(address)相同,但是成功返回0,失敗返回errno的值.

公共socket函數

s.recv(bufsize[,flag])

接受TCP套接字的數據.數據以字符串形式返回,bufsize指定要接收的最大數據量.flag提供有關消息的其他信息,通常可以忽略.

s.send(string[,flag])

發送TCP數據.將string中的數據發送到連接的套接字.返回值是要發送的字節數量,該數量可能小于string的字節大小.

s.sendall(string[,flag])

完整發送TCP數據.將string中的數據發送到連接的套接字,但在返回之前會嘗試發送所有數據.成功返回None,失敗則拋出異常.

s.close()

關閉套接字.

s.gettimeout()

返回當前超時期的值,單位是秒,如果沒有設置超時期,則返回None.

s.fileno()

返回套接字的文件描述符.

s.makefile()

創建一個與該套接字相關連的文件

3.socket原理

TCP服務端:

(1).創建套接字,綁定套接字到本地IP與端口(socket.socket(socket.AF_INET,socket.SOCK_STREAM)?, s.bind())

(2).開始監聽連接(s.listen())

(3).進入循環,不斷接受客戶端的連接請求(s.accept())

(4).然后接收傳來的數據,并發送給對方數據(s.recv() , s.sendall())

(5).傳輸完畢后,關閉套接字(s.close())

TCP客戶端:

(1).創建套接字,連接遠端地址(socket.socket(socket.AF_INET,socket.SOCK_STREAM)?, s.connect())

(2).連接后發送數據和接收數據(s.sendall(), s.recv())

(3).傳輸完畢后,關閉套接字(s.close())

4.例1:簡單實現socket通信

服務端:

[root@node1 python]# vim socket12.py

#!/bin/env python

#!-*- coding:UTF-8 -*-

import socket

s=socket.socket()

host=socket.gethostname()

port=1234

s.bind((host,port))

s.listen(5)

while True:

c,addr=s.accept()

print "Got connection from,addr"

c.send("Thank you for connection")

c.close()

[root@node1 python]# chmod? 755 socket12.py

[root@node1 python]# ./socket12.py

[root@node1 python]# netstat -antulp | grep 1234

tcp??????? 0????? 0 ? 0.0.0.0:1234?????????? 0.0.0.0:*?????????????????? LISTEN????? 31580/python

客戶端:

[root@node2 ~]# vim socket12.py

#!/bin/env python

#!-*- coding:UTF-8 -*-

import socket

s=socket.socket()

host='0.0.0.0'??????????? --服務端的IP地址

port=1234

s.connect((host,port))

print s.recv(1024)

[root@node2 ~]# chmod? 755 socket12.py

[root@node2 ~]# ./socket12.py

Thank you for connection

[root@node2 ~]#

此時服務端就會有數據:

5.例2:利用socket協議在客戶端操作服務器

服務器端:

[root@node1 python]# cat socket2.py

#!/bin/env python

#!-*- coding:UTF-8 -*-

import socket

import commands

host=socket.gethostname()???? --服務器的主機名

port=1245??????????????????????????????? --啟動python腳本的端口

s=socket.socket()????????????????????? --實例一個socket對像

s.bind((host,port))???????????????????? --端口綁定到主機的IP地址

s.listen(5)????????????????????????????????? --允許多少個客戶端連接

while True:

conn,addr=s.accept()?????????? --接收客戶端的信息

print "Connect by",addr?????? --在服務端輸出客戶端的IP地址

while True:

data=conn.recv(1024)

cmd_status,cmd_result=commands.getstatusoutput(data)?? --獲取客戶端的命令

if len(cmd_result.strip()) == 0:

conn.sendall('Done.')

else:

conn.sendall(cmd_result)

conn.close()

[root@node1 python]# ./socket2.py

[root@node1 python]# netstat -antulp | grep python

tcp??????? 0????? 0? 0.0.0.0:1245?????????? 0.0.0.0:*?????????????????? LISTEN????? 2550/python

[root@node1 python]#

客戶端:

[root@node2 ~]# cat socket2.py

#!/bin/env python

#!-*- coding:UTF-8 -*-

import socket,commands

host='0.0.0.0'???????? --服務端的IP地址

port=1245

s=socket.socket()

s.connect((host,port))

while True:

cmd=raw_input("Please input cmd:")

s.sendall(cmd)

data=s.recv(1024)

print data

s.close()

[root@node2 ~]#?

總結

以上是生活随笔為你收集整理的python的socket模块_python模块:socket模块的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。