1. 程式人生 > >socket函式詳解

socket函式詳解

一、引數

socket.IF_INET IPV4協議
socket.IF_INET6 IPV6協議
socket.SOCK_STREAM TCP
socket.SOCK_DGRAM UDP

二、建立TCP套接字:

import socket
socket.socket(socket.IF_INET, socket.SOCK_STREAM)

三、建立UDP套接字:python

import socket
socket.socket(socket.IF_INET, socket.SOCK_DGRAM)

1. 服務端函式:

  • s.bind(address) 將套接字繫結到地址,在AF_INET下,以元組(host, port)的形式表示地址
  • s.listen(backlog)開始監聽TCP傳入連線 s.accept() 接收tcp連線並返回(conn,
  • address),conn是新的套接字物件,address是連線客戶端的地址。

2. 客戶端socket函式:

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

3. 公共socket函式:

  1. s.recv(bufsize[,flag]) 接收TCP套接字的資料,資料以字串形式返回,bufsize指定要接受的資料大小
  2. s.send(string[,flag]) 傳送TCP資料,將string中的資料傳送到連線的套接字,返回值是要傳送的位元組數量。
  3. s.sendall(string[,flag]) 完整發送TCP資料,將string中的資料傳送到連線的套接字,返回之前會嘗試傳送所有資料,成功返回none,失敗丟擲異常。
  4. s.recvfrom(bufsize[.flag]) 接受UDP套接字的資料。與recv()類似,但返回值是(data,address)。其中data是包含接收資料的字串,address是傳送資料的套接字地址。
  5. s.sendto(string[,flag],address),傳送UDP資料。將資料傳送到套接字,address是 形式為(ipaddr,port)的元組,指定遠端地址。返回值是傳送的位元組數。
  6. s.close(),關閉套接字。

四、程式設計思路:

1、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()

2、TCP客戶端:

1 建立套接字,連線遠端地址

# socket.socket(socket.AF_INET,socket.SOCK_STREAM) , s.connect()

2 連線後傳送資料和接收資料 # s.sendall(), s.recv()

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