Python advanced programming skills-5, 6 SOCKET programming TCP and UDP

Socket TCP server

import socket
from pymysql import *
import threading

def mysql_select(server_mysql_name):
    try:
        conn = connect(
            host="localhost",
            port=3306,
            user="root",
            passwd="root",
            db='tcp',
            charset='utf8'
        )
        cursor = conn.cursor()
        sqlstr = f"select * from tcp_to_write where name='{server_mysql_name}'"
        cursor.execute(sqlstr)
        result = cursor.fetchone()
        cursor.close()
        conn.close()
        return '出生于' + str(result[3])
    except Exception as e:
        # print(e)
        return '无此人'

def Server_send_rev(Socket_New_Server):
    while  True:
        #7、接收客户端传递过来的字节,字节长度1024
        Client_data = Socket_New_Server.recv(1024)
        server_mysql_name = Client_data.decode('gbk')
        #8、将传递过来的值带入mysql查询,返回查询结果
        result = mysql_select(server_mysql_name)
        #9、将查询结果值返回给客户端
        Socket_New_Server.send(result.encode('gbk'))
    #10、于while外部关闭字节套,有利于与客户端持续连接,否则客户端索取一次后关闭
    Socket_New_Server.close()

def main():
    #1、建立socket,family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None。默认IPV4,TCP
    Socket_Server = socket.socket()
    #2、Server端绑定IP
    Socket_Server.bind(("127.0.0.1", 6001))
    while True:
        #3、监听客户端连入
        Socket_Server.listen(128)
        #4、为客户端建立新的Socket,便于后续其他排队的客户端连入
        Socket_New_Server, Socket_Addr = Socket_Server.accept()
        #5、配置多线程,target参数=方法,args参数=方法实参
        th=threading.Thread(target=Server_send_rev,args=(Socket_New_Server,),daemon=True)
        #6、多线程跑起来
        th.start()
        #Server_send_rev(Socket_New_Server)

if __name__ == '__main__':
    main()

Socket TCP client

import socket

def client_send_rev(socket_client):
    data_client = input("请输入传送内容:")
    #3、发送数据给Server
    socket_client.send(data_client.encode('gbk'))
    #4、等待接收Server数据
    data_server = socket_client.recv(1024)
    print(f"{data_client}{data_server.decode('gbk')}")

def main():
    #1、建立socket
    socket_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_ip = "127.0.0.1"
    server_port = 6001
    #2、连接Server
    socket_client.connect((server_ip, server_port))
    while True:
        client_send_rev(socket_client)
    #5、关闭字节套
    socket_client.close()
    
if __name__ == '__main__':
    main()

Socket UDP

from socket import socket,AF_INET,SOCK_DGRAM
send_s=socket(AF_INET,SOCK_DGRAM)
send_s.bind(('',6001))
send_s.sendto(b'ABC',("192.168.96.130",6000))
send_s.close()

Because tcp uses connect to connect to the server, but UDP is not used, so when sending data, specify the other party's IP and port before sending

Summary: UPD is a one-way transmission. The sender does not know whether the other party has received data. TCP is an interactive data transmission. If A sends data to B, B is in the monitoring state. After A connects to B, a socket is created in B. The original Socket receives the following client, so as to achieve the role of transmission

Guess you like

Origin blog.csdn.net/qq_37697566/article/details/103909318