pyhton网络编程基础

本文深入介绍了TCP/IP协议,包括IP地址、端口号的作用,以及TCP协议的特性。通过实例展示了如何使用Python进行TCP套接字编程,包括客户端和服务器端的实现步骤。同时,提到了HTTP协议的作用,它是基于TCP的,规定了浏览器与Web服务器的通信数据格式。最后,文章指出了TCP通信过程中的注意事项,如连接建立、数据传输和关闭套接字的时机。
摘要由CSDN通过智能技术生成

IP地址:标识网络设备的地址,区分不同的网络设备
发送数据:应用程序发送数据,先把数据写入到发送缓冲(内存中的一片空间),再由操作系统控制网卡把缓冲区的数据发送给服务端的网卡
接收数据:操作系统通过网卡接收数据,把数据写入到接收缓冲区,应用程序再从接收缓冲区接收客户端发送的数据
端口号:操作系统为了统一管理很多的端口,对端口进行编号,端口号有65536,知名端口号:0~1023,动态端口:1023 ~65536
tcp协议(传输控制协议):面向连接、可靠的、基于字节流的传输通讯协议
socket(套接字):进行网络通讯的一个工具,好比现实中的插座,网络传输数据要经过socket,好比数据的搬运工
tcp网络应用程序的开发:分为客服端应用程序和服务端应用程序,客户端跟服务端建立连接,经过三次握手
网络程序通讯流程
1.通过ip地址找到网络中的设备
2.通过端口号找到对应的进程端口
3.传输数据是还需要使用传输协议(tcp),保证数据的可靠性
4.socket完成进程之间的网络数据传输
客户端开发:
1.创建客户端套接字对象
2.和服务端套接字建立连接
3.发送数据
4.接收数据
5.关闭客户端套接字

import socket

#创建套接字对象
#AF_INET:   ipv4地址类型,AF_INET6:ipv6类型
#socket.SOCKET_STREAM表示tcp协议类型
tcp_client_socket=socket.socket(socke.AF_INET,socket.SOCKET_STREAM)
#和服务端套接字建立连接
tcp_client_socket.connnect(('192.168.0.103',88))
send_str='你好'
# 网络传输数据对二进制的数据进行传输,将字符串转换成二进制
send_data=send_str.encode()
#发送数据给服务端
tcp_client_socket.send(send_data)
#接收服务端的数据
#1024表示每次接收的最大字节数
recv_data=tcp_client_socket.recv(1024)
#对服务端接收的二进制数据进行解码
recv_content=recv_data.decode()
print('服务端结束的数据为:',recv_content)
#关闭套接字
tcp_client_socket.close()

服务端开发流程:
1.创建服务端套接字对象
2.绑定端口号
3.设置监听
4.等待接受客户端的链接请求
5.接收数据
6.发送数据
7.关闭套接字

import socket
import threading
def recive_client(new_socket,client_addr):
    print('客户端IP地址和端口号:', client_addr)
    #接收消息
    while True:
        recive_data = new_socket.recv(1024)
        if recive_data:
            print(recive_data.decode('gbk'))
            # 发送的字符串转化成二进制
            send_str =input("请回复{}:".format(client_addr))
            send_content = send_str.encode('gbk')
            # 向客户端发送消息
            new_socket.send(send_content)
        else:
            print("{}退出".format(client_addr))
            break
    new_socket.close()


if __name__ == '__main__':
    #创建套接字对象
    #AF_INET:   ipv4地址类型,AF_INET6:ipv6类型
    tcp_service_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #解决端口号复用问题:服务器程序退出端口立即释放
    #1.SOL_SOCKET:表示当前套接字
    #2.SO_REUSEADDR:表示复用端口选线
    #True表示确定复用
    tcp_service_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
    #绑定端口号
    tcp_service_socket.bind(('',6666))
    #设置监听,120表示监听最大客户端的链接数
    tcp_service_socket.listen(120)
    # 循环接收客户端的连接请求
    while True:
        new_socket,client_addr = tcp_service_socket.accept()
        t = threading.Thread(target=recive_client, args=(new_socket,client_addr))
        # 守护主线程,主线程运行结束,子线程销毁,写法相当于t.daemon=True
        t.setDaemon(True)
        t.start()
    #服务器程序一直运行不关闭,这行代码可以省略
    # tcp_service_socket.close()


tcp应用程序的注意点介绍
1.当tcp客户端程序想要和tcp服务端程序进行通信的时候必须要先建立连接
2.tcp客户端程序一般不需要绑定端口号,因为客户端是主动发起建立连接的
3.tcp服务端程序必须绑定端口号,否则客户端找不到tcp服务端的程序
4.listen后的套接字是被动套接字,只负责接收新的客户端的链接请求,不能发送消息
5.当tcp客户端程序和tcp服务端程序连接成功后,tcp服务器端的程序会产生一个新的套接字,收发客户端消息使用该套接字
6.关闭accept返回的套接字意味着和这个客户端通信完毕
7.关闭listen后的套接字意味着服务端的套接字关闭了,会导致新的客服端不能连接服务端,但是之前连接成功的客户端还能正常的进行通信
8.当客户端的套接字调用close后,服务器端的recv会解阻塞,返回的数据长度为0,服务器端可以通过返回的数据长度判断客户端是否已经下线,反之服务端关闭套接字,客服端的recv也会解阻塞,返回的数据长度也为0

http(超文本传输协议):http协议格式是基于tcp传输协议的,发送数据需要建立连接
**http协议的作用:**它规定了浏览器和web服务器的通信数据的格式,也就是说浏览器和web服务器进行通信需要使用http协议
http请求报文:浏览器发送给web服务器程序的数据
url的组成部分
1.协议部分:https:// https:// ftp://
2.域名部分:比如www.baidu.com
3.资源路径部分
4.查询参数部分

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值