Python中TCP和UDP网络编程

网络编程

TCP编程

TCP协议提供可靠传输的服务,一种面向连接的通信方式。
在服务端,不断进行的步骤有:

  1. 创建Socket,绑定本地IP与端口;
  2. 监听
  3. 进入循环,不断接收客户端的连接请求;
  4. 接收传来的数据,发送给客户端数据;
  5. 关闭Socket;

在客户端,不断进行的步骤有:

  1. 创建Socket,连接服务端;
  2. 发送数据以及接收数据;
  3. 关闭Socket;

服务端:

# -*- coding: utf-8 -*-

import socket
import threading
import time


# 接收传来的数据并发送数据
def run_server(sock, addr):
    print('接收来自 %s:%s 的连接...' % addr)
    while True:
        # 接收最大数据量大小为1024字节的数据
        data = sock.recv(1024)
        time.sleep(1)
        if not data or data.decode('utf-8') == 'exit':
            print('收到结束信息,即将关闭连接...')
            break
        print('接收到数据 %s' % data.decode('utf-8'))
        # 服务端在收到数据之后发送确认信息
        sock.send(('确认收到数据 %s' % data.decode('utf-8')).encode('utf-8'))
    # 关闭socket
    sock.close()
    print('来自 %s:%s 的连接已经关闭...' % addr)


if __name__ == '__main__':
    # 创建TCP Socket 并绑定IP与端口
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind(('127.0.0.1', 8088))
    # 监听, 设置最大连接数量
    s.listen(5)
    print('正在准备连接...')
    # 接收连接
    sock, addr = s.accept()
    # 创建线程处理连接
    t = threading.Thread(target=run_server, args=(sock, addr))
    t.start()
    t.join()
    print('线程结束...')

客户端

# -*- coding: utf-8 -*-

import socket


# 创建Socket并连接
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 8088))
print('客户端已连接')
# 发送消息
s.send('wocao'.encode('utf-8'))
print('%s' % s.recv(1024).decode('utf-8'))
s.send('exit'.encode('utf-8'))
# 关闭socket
s.close()

UDP编程

UDP协议是不可靠的,一种面向无连接的协议。
在服务端的步骤:

  1. 创建Socket,绑定IP和端口;
  2. 接收数据和发送数据;
  3. 关闭Socket;

在客户端的步骤:

  1. 创建Socket;
  2. 发送数据和接收数据;
  3. 关闭Socket;

服务端:

# -*- coding: utf-8 -*-

import socket

# 创建socket并绑定
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
host = '127.0.0.1'
port = 8088
s.bind((host, port))

data, addr = s.recvfrom(1024)
print('从%s:%s中获取数据...' % addr)
print('接收到数据 %s' % data.decode('utf-8'))

客户端:

# -*- coding: utf-8 -*-

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
host = '127.0.0.1'
port = 8088

data = 'wocao'
s.sendto(data.encode('utf-8'), (host, port))

s.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值