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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Socket常用语法与socketserver实例

發布時間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Socket常用语法与socketserver实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1》Socket相關:

      1>Socket ? Families(地址簇):

          socket.AF_UNIX   ? 本機進程間通信

          socket.AF_INET   IPV4 

          socket.AF_INET6   IPV6?

      2>Socket ?Types:

          socket.SOCK_STREAM   ?#for ? ?tcp

          socket.SOCK_DGRAM   #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 ? ?#廢棄了

      3>Socket方法:

          socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None)

          socket.socketpair([family[,type[,proto]]])

          socket.create_connection(address[,timeout[,source_address]])

          socket.getaddrinfo(host,port,family=0,type=0,proto=0,flags=0) ? ? ? #?獲取要連接的對端主機地址;

          sk.bind(address)

              s.bind(address):將套接字綁定到地址,address地址的格式取決于地址簇,在AF_INET下,以(host,port)的形式表示地址;

          sk.listen(backlog):開始監聽傳入連接,backlog指定在拒絕連接之前,可以掛起的最大連接數量;backlog等于5,表示內核已經接到了連接請求,但服務器還 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?沒有調用accept進行處理的連接個數,這個值不能無限大,因為要在內核中維護連接隊列;

          sk.setblocking(bool):是否阻塞(默認True),如果設置False,那么accept和recv時一旦無數據,則報錯;

          sk.accept():接受連接并返回(conn,address),其中conn是新的套接字對象,可以用來接收和發送數據,address用來接收客戶端的地址;接收TCP客戶的連 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?接(阻塞式)等待連接的到來;

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

          sk.connect_ex(address):同上,只不過會有返回值,連接成功時返回0,連接失敗時返回編碼,列如10061;

          sk.close():關閉套接字;

          sk.recv(bufsize[,flag]):接受套接字的數據,數據以字符串形式返回,bufsize指定最多可接收的數量,flag提供有關信息,通常可以忽略;

          sk.recvfrom(bufsize[,flag]):與recv()類似,但返回值是(data,address),其中data是包含接收數據的字符串,address是套接字地址;

          sk.send(string[,flag]):將string中的數據發送到連接的套接字,返回值是要發送的字節數量,該數量可能小于string的字節數量,即可能未將指定內容全部發 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 送;

          sk.sendall(string[,flag]):將string中的數據發送到連接的套接字,但在返回之前會嘗試發送所有數據,成功則返回None,否則失敗;內部通過遞歸調用send,將所 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 有內容發送出去;

          sk.sendto(string[,flag],address):將數據發送到套接字,address是形式為(ipaddr,port)的元組,指定運程地址,該函數主要用于UDP協議;

          sk.settimeout(timeout):設置套接字操作的超時期,timeout是一個浮點數,單位是秒,值為None表示沒有超時期,一般應該在剛創建套接字時設置,因為他們 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?可能用于連接的操作(如client連接最多等待5s);

          sk.getpeername():返回連接套接字的遠程地址,返回值通常是元組(ipaddr,port);

          sk.getsockname():返回套接字自己的地址,通常是一個元組(ipaddr,port);

          sk.fileno():套接字的文件描述符;

                socket.sendfile(file,offset=0,count=None);發送文件,但目前多數情況下并無什么用;

2》Socket ? Server:

       ? ? ? ??          

      1>常用的socket ?server:

          class ? socketserver.ForkingTCPServer

          class ? socketserver.ForkingUDPServer

          class ? socketserver.ThreadingTCPServer

          class ? socketserver.ThreadingUDPServer

  ?    2>

2》Socketserver實例:

       服務器端:

            

      客戶端:

          

      實例效果:

          客戶端:

              

       

            

?

          

                  

?

轉載于:https://www.cnblogs.com/xiaocheche/p/7820056.html

總結

以上是生活随笔為你收集整理的Socket常用语法与socketserver实例的全部內容,希望文章能夠幫你解決所遇到的問題。

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