网络编程下的socket编程(TCP\UDP)

TCP编程步骤

TCP的socket编程的服务器端程序如下:

1、创建套接字(socket)
2、将套接字绑定到一个本地地址和端口上(bind)
3、将套接字设为监听模式,准备接收客户端请求(listen)
4、等待客户请求到来,当请求到来后,接收连接请求,返回一个新的对应于此次连接的套接字(accept)
5、用返回的套接字和客户端进行通信(send/recv)
6、返回,等待另一客户请求
7、关闭套接字

TCP的socket编程的客户端程序如下:

1、创建套接字(socket)
2、向服务器发出连接请求(connect)
3、和服务器端进行通信(send/recv)
4、关闭套接字

在这里插入图片描述

============================================================================

UDP编程步骤

UDP的socket编程的服务器端程序如下:

1、创建套接字(socket)
2、将套接字绑定到一个本地地址和端口上(bind)
3、等待接收数据(recvfrom)
4、关闭套接字

UDP的socket编程的客户端程序如下:

1、创建套接字(socket)
2、向服务器发送数据(sendto)
3、关闭套接字

在这里插入图片描述

python编程实现

TCP服务器端

# -*- coding: UTF-8 -*-
import socket

def main():
    # 1、创建一个TCP服务端套接字对象
    tcp_sever = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 2. 绑定本地的相关信息,如果不绑定,则系统会随机分配一个端口号
    local_addr = ('', 12344)  # ip地址和端口号,ip一般不用写,表示本机的任何一个ip
    tcp_sever.bind(local_addr)

    # 3、监听连接,使用socket创建的套接字默认的属性是主动的,使用listen将其变为被动的,这样就可以接收别人的链接了
    tcp_sever.listen(5)

    # 4、等待连接,其返回值为连接过来的客户端套接字对象和IP地址
    print('waiting for connect...')
    client_socket, client_addr = tcp_sever.accept()

    while True:
        # 5、等待接收对方发送过来的数据
        recv_data = client_socket.recv(1024)  # 接收TCP数据,数据以字符串形式返回;'1024'表示每次接收的最大数据量
        print("Recv from", client_addr, "recv_data:", recv_data.decode("utf-8"))
        command = recv_data.decode()

        if command == 'exit':
            break
        else:
            reply_info = input("server 输入回复信息:")
            # 6、返回数据到客户端
            client_socket.send(reply_info.encode())
            # client_socket.send(b'OK!')  # 如果执行的结果无返回值,则给客户端发送'OK'

    # 7、关闭套接字
    tcp_sever.close()


if __name__ == '__main__':
    main()

TCP客户端实现

# -*- coding: UTF-8 -*-
import socket


def main():
    # 1、创建一个TCP服务端套接字对象
    tcp_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 2. 准备服务端的地址和端口,'192.168.2.11'表示目的ip地址,12344表示目的端口号
    dest_addr = ('192.168.2.11', 12344)  # 注意这是一个元组,其中ip地址是字符串,端口号是数字

    # 3、链接到服务器
    tcp_client.connect(dest_addr)

    while True:
        com = input("client 输入命令:")
        # 4、发送数据
        if com == 'exit':
            tcp_client.send(b'exit')  # 发送TCP数据,将输入的命令发送到连接的套接字。
            break
        else:
            tcp_client.send(com.encode())
        # 5、等待接收服务端发送过来的数据,最大接收1024个字节
        d = tcp_client.recv(1024)  # 接收TCP数据,数据以字符串形式返回;'1024'为指定要接收的最大数据量。
        # 6、将接收到的数据打印出来
        print('client recv: ', d.decode(), '--->', len(d))  # 打印从服务端发送回来的数据和长度

    # 7、关闭套接字
    tcp_client.close()


if __name__ == '__main__':
    main()

在这里插入图片描述
UDP编程实现
UDP不像TCP需要建立永久联系并进行监听,因此客户端和服务端的实现基本都是一样的。其中,服务端需要绑定固定的端口,方便客户端进行连接发送信息。而绑定端口对于客户端是一个可选项, 可以根据自己的需要进行设置。

import socket
# 创建一个服务器的套接字基于udp,type=socket.SOCK_DGRAM表示使用udp协议
udp_sk = socket.socket(type=socket.SOCK_DGRAM)

udp_sk.bind(('192.168.30.227', 8080))   # 绑定服务器的ip和端口的套接字
while True:
    # udp协议不用建立连接
    msg, addr = udp_sk.recvfrom(1024)  # 接收1024字节的消息 msg表示内容,addr表示ip和端口
    print(msg)
    inp = input('>>>').strip().encode('utf-8')
    udp_sk.sendto(inp, addr)  # 发送消息,需写入对方的ip和端口

udp_sk.close()

参考文献
Python网络编程之udp
python——udp网络通信
https://blog.csdn.net/qq_15029743/article/details/82429828

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值