【Python复习巩固 Day9】网络编程

本文详细介绍了计算机网络的基础概念,包括TCP和UDP编程的具体实现。通过示例代码,展示了如何使用Python进行网络编程,涵盖TCP连接的建立与数据传输,以及UDP的无连接数据包发送。

计算机网络就是把各个计算机连接在一起,让网络中的计算机可以互相通信。网络编程就是如何在程序中实现两台计算机的通信

TCP编程

创建一个基于TCP连接的Socket

"""
创建一个基于TCP连接的Socket
"""
import socket

# 创建一个socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 建立连接
s.connect(('www.jd.com', 80))
# 发送数据
s.send(b'GET / HTTP/1.1\r\nHost: www.jd.com\r\nConnection: close\r\n\r\n')
# 接收数据
buffer = []
while True:
    d = s.recv(1024)  # 每次最多接收1k字节
    if d:
        buffer.append(d)
    else:
        break
data = b''.join(buffer)
# 关闭连接
s.close()
header, html = data.split(b'\r\n\r\n', 1)
print(header.decode('utf-8'))
print(html.decode('utf-8'))

HTTP/1.1 302 Moved Temporarily
Server: nginx
Date: Fri, 31 Jul 2020 05:35:27 GMT
Content-Type: text/html
Content-Length: 138
Connection: close
Location: https://www.jd.com/
Access-Control-Allow-Origin: *
Timing-Allow-Origin: *
X-Trace: 302-1596173727411-0-0-0-0-0
Strict-Transport-Security: max-age=360
<html>
<head><title>302 Found</title></head>
<body>
<center><h1>302 Found</h1></center>
<hr><center>nginx</center>
</body>
</html>


Process finished with exit code 0

简单的服务器程序

"""
简单的服务器程序
"""
import socket
import threading
import time


def tcp_link(s1, a):
    print('Accept new connection from %s: %s..' % a)
    s1.send(b'Welcome')
    while True:
        data = s1.recv(1024)
        time.sleep(1)
        if not data or data.decode('utf-8') == 'exit':
            break
        s1.send(('Hello, %s' % data.decode('utf-8')).encode('utf-8'))
    s1.close()
    print('Connection from %s: %s closed' % a)


s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 监听端口
s.bind(('127.0.0.1', 8888))
s.listen(10)
print('Wait for connection...')
while True:
    sock, addr = s.accept()
    # 创建新的线程来处理TCP连接
    t = threading.Thread(target=tcp_link, args=(sock, addr))
    t.start()

Wait for connection...
Accept new connection from 127.0.0.1: 50437..
Connection from 127.0.0.1: 50437 closed

在这里插入图片描述

UDP编程

TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据,相对TCP,UDP则是面向无连接的协议,使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发送数据包,但是,能不能到达就不知道了

虽然UDP传输数据不可靠,但它的优点是和TCP比,速度快,对于不要求可靠到达的数据,就可以使用UDP协议

"""
简单的UDP服务器
"""
import socket

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定端口
s.bind(('127.0.0.1', 8888))
print('Bind UDP on 8888')
while True:
    # 接收数据
    data, addr = s.recvfrom(1024)
    print('Received from %s: %s' % addr)
    s.sendto(b'Hello, %s' % data, addr)

Bind UDP on 8888
Received from 127.0.0.1: 56348
Received from 127.0.0.1: 56348
Received from 127.0.0.1: 56348

在这里插入图片描述

蒟蒻写博客不易,加之本人水平有限,写作仓促,错误和不足之处在所难免,谨请读者和各位大佬们批评指正。
如需转载,请署名作者并附上原文链接,蒟蒻非常感激
名称:虐猫人薛定谔
博客地址:https://blog.youkuaiyun.com/Deep___Learning

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值