Python网络编程利用Python进行TCPUDP套接字编程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python网络编程利用Python进行TCPUDP套接字编程相关的知识,希望对你有一定的参考价值。

之前实现了Java版本的TCP和UDP套接字编程的例子,于是决定结合Python的学习做一个Python版本的套接字编程实验。

流程如下:

1.一台客户机从其标准输入(键盘)读入一行字符,并通过其套接字将该行发送到服务器。

2.服务器从其连接套接字读取一行字符。

3.服务器将该行字符转换成大写。

4.服务器将修改后的字符串(行)通过连接套接字再发回给客户机。

5.客户机从其套接字中读取修改后的行,然后将该行在其标准输出(监视器)上打印出来。

 

【TCP】服务器端代码:

import socket
import time
import threading

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  #创建socket (AF_INET:IPv4, AF_INET6:IPv6) (SOCK_STREAM:面向流的TCP协议)

s.bind((127.0.0.1, 10021))                           #绑定本机IP和任意端口(>1024)

s.listen(1)                                            #监听,等待连接的最大数目为1

print(Server is running...)                          
                               
def TCP(sock, addr):                                   #TCP服务器端处理逻辑
    
    print(Accept new connection from %s:%s. %addr)   #接受新的连接请求

    while True:
        data = sock.recv(1024)                         #接受其数据
        time.sleep(1)                                  #延迟
        if not data or data.decode() == quit:        #如果数据为空或者‘quit‘,则退出
            break
        sock.send(data.decode(utf-8).upper().encode())  #发送变成大写后的数据,需先解码,再按utf-8编码,  encode()其实就是encode(‘utf-8‘)

    sock.close()                                       #关闭连接
    print(Connection from %s:%s closed. %addr)       

while True:
    
    sock, addr = s.accept()                            #接收一个新连接
    TCP(sock, addr)                                    #处理连接

【TCP】客户端代码:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #创建一个socket

s.connect((127.0.0.1, 10021))                       #建立连接

while True:                                           #接受多次数据

    data = input(请输入要发送的数据:)                 #接收数据

    if data == quit:                                #如果为‘quit‘,则退出
        break

    s.send(data.encode())                             #发送编码后的数据

    print(s.recv(1024).decode(utf-8))               #打印接收到的大写数据

s.send(bquit)                                       #放弃连接

s.close()                                             #关闭socket

运行结果:

技术分享

 

UDP协议则不需要事先建立连接,直接互相发送数据即可。

【UDP】服务器端代码:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #创建一个socket,SOCK_DGRAM表示UDP

s.bind((127.0.0.1, 10021))                         #绑定IP地址及端口

print(Bound UDP on 10021...)

while True:                                          
    data, addr = s.recvfrom(1024)   #获得数据和客户端的地址与端口,一次最大接收1024字节
    print(Received from %s:%s. % addr)
    s.sendto(data.decode(utf-8).upper().encode(), addr)#将数据变成大写送回客户端

#不关闭socket

 

【UDP】客户端代码:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
 
addr = (127.0.0.1, 10021)       #服务器端地址

while True:
    data = input(请输入要处理的数据:) #获得数据
    if not data or data == quit:
        break
    s.sendto(data.encode(), addr)    #发送到服务端
    recvdata, addr = s.recvfrom(1024)  #接收服务器端发来的数据
    print(recvdata.decode(utf-8))    #解码打印

s.close()            #关闭socket

 

运行结果:

技术分享

以上是关于Python网络编程利用Python进行TCPUDP套接字编程的主要内容,如果未能解决你的问题,请参考以下文章

Python编程语言学习:基于python各种库(matplotlibImage)利用多种方法打图片或进行图片可视化之详细攻略

利用Python网络爬虫抓取微信好友的签名及其可视化展示

利用Python网络爬虫抓取微信好友的签名及其可视化展示

如何利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例

如何利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例

利用python的networkx3.0 进行GIS的网络分析