网络编程初涉

网络编程初涉

套接字 socket 的分类说明

用于进程间通信,分为:
1. 基于文件系统的通信
2. 面向网络的进程通信

具体技术

  1. AF_Unix(address family Unix)—— UNIX套接字,基于文件系统进行传输,比如同一台机器上的不同进程之间的通信。
  2. AF_INET 是面向网络的套接字,AF_INET6用于IPv6协议。

套接字地址

主机:端口号

面向连接的套接字

基于TCP/IP协议,需要建立和维护虚拟电路链接。在 Python 中对应字段是 SOCK_STREAM

无连接的套接字

基于UDP/IP 协议进行传输,相对TCP/IP来讲,可靠性较低,但传递时延更短,在 Python 中对应字段是 SOCK_DGRAM

用于实验的脚本

在 Python 3 环境下编写实验脚本:

访问外部网站
# coding:utf-8
import socket
from time import ctime

__python__ = 3.6

# 创建一个socket, AF_INET 是网络间进程通信的协议族
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

""" TCP 客户端实验脚本 """
# 建立连接
s.connect(("www.sina.cn", 80))

s.send(b'GET / HTTP/1.1\r\nHost: www.sina.cn\r\nConnection: close\r\n\r\n')

# 接收数据:
buffer = []
while True:
    # 每次最多接收1k字节:
    d = s.recv(1024)
    if d:
        buffer.append(d)
    else:
        break
data = b''.join(buffer)
# 关闭连接:
s.close()

header, port, html = data.split(b'\r\n\r\n', 2)
print(header.decode('utf-8'))
# 把接收的数据写入文件:
with open('sina.html', 'wb') as f:
    f.write(html)
服务器脚本
# coding:utf-8
import socket
from time import ctime

""" TCP服务器实验脚本 """
HOST = 'localhost'
PORT = 8080
BUFSIZE = 1024
ADDR = (HOST, PORT)

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

try:
    while True:
        print("waiting for connection...")
        tcp_cli_sock, addr = tcp_server_sock.accept()
        print('...connected from:', addr)
        while True:
            data = tcp_cli_sock.recv(BUFSIZE)
            if not data:
                break
            send_str= '[%s] %s'%(
                bytes(ctime(), 'utf-8'), data)
            send_data = send_str.encode("utf-8")
            tcp_cli_sock.send(send_data)
        tcp_cli_sock.close()
except (EOFError, KeyboardInterrupt) as errors:
    print(errors)
finally:
    tcp_server_sock.close()
客户端脚本
# coding:utf-8
__python__ = 3.6
import socket

""" 同服务器进行交互的客户端脚本 """
HOST = 'localhost'
PORT = 8080
BUFSIZE = 1024
ADDR = (HOST, PORT)
tcp_cli_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_cli_sock.connect(ADDR)

try:
    while True:
        send_str = input('> ')
        if not send_str:
            break
        tcp_cli_sock.send(send_str.encode("utf-8"))
        data = tcp_cli_sock.recv(BUFSIZE)
        if not data:
            break
        print(data)
except (EOFError, KeyboardInterrupt) as errors:
    print(errors)
finally:
    tcp_cli_sock.close()

基于 Python 的异步系统

  1. Twisted

  2. Greenlets

  3. Tornado

  4. Diesel

  5. Concurrence

  6. Eventlet

  7. Gevent

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值