网络编程

本文深入探讨了网络编程的核心——Socket,解释了其作为TCP/IP和UDP协议封装的作用,对比了TCP与UDP的优缺点及应用场景,并提供了Python中实现TCP与UDP服务器及客户端的代码示例。

socket

“”"
学习网络编程 其实就是在学socket

socket是什么?
    翻译过来称为套接字
    是对底层的 TCP IP UDP 等网络协议进行封装
    使得上层的应用程序开发者,不用直接接触这对复杂,丑陋的协议
在程序员的言论,他就是一个封装好的模块!
要完成网络通讯,只需要使用系统提供的socket模块就行



TCP和UDP是传输层最常见的协议
主要控制传输数据的方式
TCP的传输方式
    优点:通过三次握手来与服务器建立连接
         可以保证数据的完整性
            a机器给b机器发送数据包  要求b机器必须立即返回一个确认包
            a机器会等待一段时间,如果超时还没有收到确认,则重发数据
    缺点:传输效率低
    使用场景: 文字聊天,支付宝转账等,
UDP
    传输方式:不需要建立连接,直接发送
    缺点: 不能保证数据的完整性
    优点:传输效率比TCP高
    使用场景:视频通话,语音通话,UDP



python中的socket

在使用socket的时候用户需要关心的是 ip地址,port端口, 传输协议TCP/UDP,你要发送的数据data

在写网络编程的时候,必然是有两台代码,对应着客户端和服务器

使用socket来完成TCP通讯
    应该先完成服务器的代码编写

“”"

TCP服务器


import socket
# 1.创建一个代表服务器的socket对象
s = socket.socket()

# 2.绑定端口号和IP地址
# 127.0.0.1 表示当前这个电脑的ip
address = ("127.0.0.1",8080)
s.bind(address)

print("服务器已启动!")

# 3.开始监听这个端口
# 5表示 可以有5个处于半连接状态的连接   指的不是最大连接数
s.listen(5)
print("test")

# 4.接受连接请求
# 该函数是阻塞的 会卡主程序的执行,必须等到有一个客户端进来才会继续执行
# 返回元组  第一个是代表客户端的socket对象 第二客户端的地址信息
client,c_address = s.accept()
print("有一个连接已建立!")
print(c_address)

# 给客户端发送数据

# 5.读写数据
# 接受数据
res = client.recv(1024)
print(res)



# 6.关闭连接
# s.close()


TCP客户端

import socket

# 1.创建客户端的socket对象
c = socket.socket()

# 2.指定服务器的ip和port
server_address = ("127.0.0.1",8080)

# 3.建立连接
c.connect(server_address)

# 4.读写数据
# 发送数据到服务器
c.send("hello 我是客户端!".encode("utf-8"))

# 5.关闭连接
c.close()




UDP服务器


import socket
# 1.创建socket对象
s = socket.socket(type=socket.SOCK_DGRAM)

# 2.绑定端口和ip
s.bind(("127.0.0.1",10000))

while True:
    # 3.接受数据
    res = s.recv(1024)
    print(res)

while True:
    msg = input(">>>:")
    # 需要获取对方的ip和端口
    #s.sendto(msg.encode("utf-8"), ("127.0.0.1", 10000))

# 关闭资源
s.close()






UDP客户端


import socket
# 1.创建socket对象
c = socket.socket(type=socket.SOCK_DGRAM)
while True:
    msg = input(">>>:")
    c.sendto(msg.encode("utf-8"),("127.0.0.1",10000))

c.close()





聊天服务器

"""
    正常的聊天的程序  客户端发送的数据 先发送到服务器端  服务器端把消息转发给你的目标好友


"""

import socket

server = socket.socket()
server.bind(("127.0.0.1",65535))
server.listen(5)

client, c_address = server.accept()

while True:
    data = client.recv(1024).decode("utf-8")
    print("收到来自客户端的数据:",data)
    # 如果对方发来一个over 我就关闭连接
    if data == "over":
        client.close()
        break
    # 把对方传过来的数据转换为大写 在发回去!
    client.send(data.upper().encode("utf-8"))

# 关闭服务器端
server.close()

# 需求 客户端输入cmd命令 发送给服务器执行  服务器执行(subprocess)完后返回 执行结果








聊天客户端

import socket

client = socket.socket()

client.connect(("127.0.0.1",65535))

while True:
    # 发送
    client.send(input(">>>:").encode("utf-8"))

    # 接收
    data = client.recv(1024).decode("utf-8")
    print(data)
    if len(data) == 0:
        client.close()
        break


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值