python.网络基础

0.基础知识

TCP:是需要连接状态的通讯协议
(所以有TCP有client.connect((target_host,target_port)))
UDP:是无需连接状态的通讯协议(无状态的协议)
(所以UDP无需connect,发送完消息就好啦,是否接收到无所谓)
HTTP:一个传输协议,严格按照协议行事才行。。。
python中是用缩进来表示逻辑的。。。而不是c或者java中的括号。。。
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432004374523e495f640612f4b08975398796939ec3c000

1.TCP客户端

import socket
target_host = "www.baidu.com"
#http协议默认是80端口
target_port = 80
#创建一个socket对象
#AF_INET参数说明我们使用的是标准的IPv4地址或者主机名
#SOCK_STREAM说明这是一个TCP客户端
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#连接客户端
client.connect((target_host,target_port))
#发送数据
#下面的"GET / HTTP/1.1\r\nHost: baidu.com\r\n\r\n"格式是HTTP 1.1协议
client.send("GET / HTTP/1.1\r\nHost: baidu.com\r\n\r\n".encode())
#接收数据
response = client.recv(4096)
print (response)

在这里插入图片描述

2.UDP客户端

#UDP是一个无连接状态的传输协议,所以不用像tcp一样调用connect()函数
import socket
target_host = "127.0.0.1"
target_port = 9999
#套接字的类型为 SOCK_DGRAM
client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#sendto用于将数据发送到服务器上
client.sendto("AAABBBCCC".encode(),(target_host,target_port))

linux中的nc命令可以用于监听本地的端口,监听999端口之后再运行一下上面的UDP客户端就可以监听到啦
在这里插入图片描述

3.TCP服务器

import socket
target_host = "127.0.0.1"
#http协议默认是80端口
target_port = 9999
#创建一个socket对象
#AF_INET参数说明我们使用的是标准的IPv4地址或者主机名
#SOCK_STREAM说明这是一个TCP客户端
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#连接客户端
client.connect((target_host,target_port))
#发送数据
#下面的"GET / HTTP/1.1\r\nHost: baidu.com\r\n\r\n"格式是HTTP 1.1协议
client.send("ABCDEF".encode())
#接收数据
response = client.recv(4096)
print (response)
import socket, threading

bind_ip = "127.0.0.1"
bind_port = 9999

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((bind_ip, bind_port))  # 配置监听端口
server.listen(5)  # 开始监听,最大连接数设置为5
print("[*] Listening on %s:%d" % (bind_ip, bind_port))


def handle_client(client_socket):

    request = client_socket.recv(1024)

    print("[*] Received: %s" % request)

    client_socket.send("ACK!")

    client_socket.close()


while True:

    client, addr = server.accept()

    print("[*] Accepted connection from: %s:%d" % (addr[0], addr[1]))

    client_handler = threading.Thread(target=handle_client, args=(client,))  # 创建一条线程
    client_handler.start()  # 启动线程

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值