套接字类型

面向连接的套接字

- 基于TCP/IP,使用SOCKET_STREAM作为套接字类型

无连接的套接字

- 基于UDP/IP,使用SOCKET_DGRAM作为套接字类型

pyhton中的网络编程

socket模块

1
socket(socket_family, socket_type, protocol = 0)
  • 其中socket_family 是选择网络类型,本地网(AF_UNIX)还是因特网(AF_INET)
  • socket_type 是选择套接字的类型, protocaol默认为0

    套接字对象常用的方法

    • 服务器套接字
      1
      2
      3
      s.bind() #将主机号端口号绑定到套接字上
      s.listen() #设置并启动TCP监听器
      s.accept() #被动接受客户端连接
  • 客户端套接字
    1
    2
    s.connect() #主动发起TCP服务连接
    s.connect_ex() #此时会以错误码的形式抛出问题而不是一大串异常

创建一个时间戳服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from socket import *
from time import ctime
HOST = ''
PORT = 23456
ADDR = (HOST, PORT)
BUFSIZE = 1024

tcpSerSocket = socket(AF_INET,SOCK_STREAM)
tcpSerSocket.bind(ADDR)
tcpSerSocket.listen(5)

while True:
print("waiting for connection ...")
tcpCliSocket, addr = tcpSerSocket.accept()
print("connected from:", addr)
while True:
data = tcpCliSocket.recv(BUFSIZE)
if not data:
break
tcpCliSocket.send(data+b' time now:'+bytes(ctime(), 'utf-8'))
tcpCliSocket.close()
tcpSerSocket.close()

创建一个客户机

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from socket import *
from time import ctime
HOST = "192.168.0.118"
PORT = 23456
ADDR = (HOST, PORT)
BUFSIZE = 1024

tcpCliSocket = socket(AF_INET, SOCK_STREAM)
tcpCliSocket.connect(ADDR)

while True:
data = input('> ')
if not data:
break