计算机网络就是把各个计算机连接在一起,让网络中的计算机可以互相通信。网络编程就是如何在程序中实现两台计算机的通信
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
本文详细介绍了计算机网络的基础概念,包括TCP和UDP编程的具体实现。通过示例代码,展示了如何使用Python进行网络编程,涵盖TCP连接的建立与数据传输,以及UDP的无连接数据包发送。
1081

被折叠的 条评论
为什么被折叠?



