python复习11.8——TCP编程

TCP编程

  • Socket是网络编程的一个抽象概念。通常我们用一个Socket表示“打开了一个网络连接”
  • 客户端大多数连接都是靠TCP连接。主动发起连接的叫客户端(client),被动响应连接的叫服务器(server)

TCP服务器的建立

  1. 创建socket
  2. 绑定socket的ip地址和端口
  3. 监听客户端的连接请求
  4. 接受客户端的连接请求
  5. 与客户端对话
  6. 关闭连接

TCP客户端的创建

  1. 创建socket
  2. 连接服务器socket
  3. 与服务器对话
  4. 关闭连接
  • TCP客户端连接到服务器的ip和端口要与TCP服务器监听的ip和端口相同。
  • 服务器调用listen()开始监听端口,而后调用accept()时刻准备接受客户端的连接请求。
  • 此时服务器处于阻塞状态,直到服务器监听到客户端的请求后,接收请求并建立连接为止。
sub函数
server
import socket
import threading
import time

def tcplink(sock, addr):
    print('accept new connection from %s:%s' % addr)
    sock.send(b'welcome!')
    while True:
        data = sock.recv(1024)
        time.sleep(1)
        if not data or data.decode('utf-8') == 'exit':
            break
        sock.send(('hello,%s!' % data.decode('utf-8')).encode('utf-8'))   # 将收到的数据先解码,然后hello,%data一起编码
    sock.close()
    print('connection from %s:%s closed.' % addr)

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(('127.0.0.1',12345))     # 监听端口
s.listen(5)                    # 开始监听端口 传入的参数指定等待来连接的最大数量
print('waiting for connection...')

while True:
    # 接受一个新连接
    sock, addr = s.accept()
    # 创建新线程来处理TCP连接
    t = threading.Thread(target=tcplink, args=(sock, addr))
    t.start()

# 打印结果
# waiting for connection...
# accept new connection from 127.0.0.1:54861
# connection from 127.0.0.1:54861 closed.
client
import socket

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

# 建立连接
s.connect(('127.0.0.1', 12345))

# 接收欢迎消息
print(s.recv(1024).decode('utf-8'))

for data in [b'Michael', b'Tracy', b'Kobe']:
    # 发送数据
    s.send(data)
    print(s.recv(1024).decode('utf-8'))
s.send(b'exit')
s.close()

# 打印结果
# welcome!
# hello,Michael!
# hello,Tracy!
# hello,Kobe!
  • UTF-8是一种变长的编码方式,它使用1-4个字节表示一个符号,根据不同的符号选择不同长度的字节表示
  • decode()以 encoding 指定的编码格式解码字符串
  • encode()以 encoding 指定的编码格式编码字符串。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容