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

歡迎訪問 生活随笔!

生活随笔

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

python

Python服务器开发三:Socket

發布時間:2023/12/1 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python服务器开发三:Socket 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python服務器開發三:Socket

socket是操作系統中I/O的延續,它可以使進程和機器之間的通信成為可能。socket可以看成一個標準的文件描述符。不同的是文件需要用open()函數打開,而socket用socket()

函數建立.recv()、send()函數和read()、write()函數極為相似。

TCP一般通過accept()來為每個連接的客戶端建立一個新的scoket。UDP一般只是使用一個單一的socket,完全依靠recvfrom()返回的值來判斷該往哪里發送響應。

?

客戶端:

1、建立一個socket:

//SOCK_STREAM表示TCP,SOCK_DGRAM表示UDP,AF_INET表示IPv4 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

2、連接socket

連接socket需要一個tuple參數,來提供IP和端口號:

s.connect((“www.example.com”, 80))

3、

#!/usr/bin/env pythonimport socketprint "Creating socket...", s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) print "done."print "Looking up port number...", port = socket.getservbyname('http', 'tcp') print "done."print "Connecting to remote host on port %d..." % port, s.connect(("www.google.com", port)) print "done."#獲取本身的IP和端口號 print "Connected from", s.getsockname() #獲取遠程的IP和端口號 print "Connected to", s.getpeername()

?

文件類對象:

import socket, sysport = 70 host = sys.argv[1] filename = sys.argv[2]s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((host, port)) fd = s.makefile('rw', 0)fd.write(filename + "\r\n")for line in fd.readlines():sys.stdout.write(line)

高級接口:

import urllib, sysf = urllib.urlopen(sys.argv[1]) while 1:buf = f.read(2048)if not len(buf):breaksys.stdout.write(buf)

?

?

服務器端:

1、建立一個連接:

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

2、設置socket選項:

//socket 端口可立即復用 s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

3、綁定socket:

s.bind((host, port))

4、監聽:

s.listen(1)

5、接受連接:

while 1:clientsock, clientaddr = s.accept()print "Got connection from", clientsock.getpeername()clientsock.close()

6、

#!/usr/bin/env pythonimport socket, tracebackhost = '' # Bind to all interfaces port = 51423s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind((host, port))
#這里設定每次最多只有一個等候處理的請求,真正的服務器會設置一個很高的數字。 s.listen(1)while 1:try:clientsock, clientaddr = s.accept()except KeyboardInterrupt:raiseexcept:traceback.print_exc()continue# Process the connectiontry:print "Got connection from", clientsock.getpeername()# Process the request hereexcept (KeyboardInterrupt, SystemExit):raiseexcept:traceback.print_exc()# Close the connectiontry:clientsock.close()except KeyboardInterrupt:raiseexcept:traceback.print_exc()

使用UDP:

#!/usr/bin/env pythonimport socket, tracebackhost = '' # Bind to all interfaces port = 51423s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind((host, port))while 1:try:message, address = s.recvfrom(8192)print "Got data from", address# Echo it backs.sendto(message, address)except (KeyboardInterrupt, SystemExit):raiseexcept:traceback.print_exc()

轉載于:https://www.cnblogs.com/L-H-R-X-hehe/p/3812630.html

總結

以上是生活随笔為你收集整理的Python服务器开发三:Socket的全部內容,希望文章能夠幫你解決所遇到的問題。

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