Board logo

标题: Python3使用Socket发送信息 [打印本页]

作者: admin    时间: 2019-9-24 22:26     标题: Python3使用Socket发送信息

套接字(Socket)主要是多个程序之间的“信息通道”。程序分布在不同的计算机上,连接网络后,可以通过套接字互相发送信息。 实验概述:先在服务器端运行服务器端脚本,并处于接收状态;再去到客户端运行客户端脚本,遂将信息从客户端通过Socket发送给服务器端。 实验中,客户端的操作系统为 Win7 服务器端的操作系统为 CentOS6.9 服务器端IP地址为 192.168.168.130/24 服务器端要在防火墙打开自定义的TCP 886端口: iptables -I INPUT -p tcp --dport 886 -j ACCEPT iptables-save > /etc/sysconfig/iptables ############ ############ 例子一: 服务器端脚本的内容: [root@Zabbix_server_01 ~]# cat xx.py #coding=utf-8 import socket #这个模块是内置的,不用额外安装 server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(('192.168.168.130', 886)) #绑定本机的IP和自定义的TCP端口 server.listen(5) #最大连接数 print('starting......') def func1(): conn, addr = server.accept() client_msg = conn.recv(1024) print(f"Client addr: {addr}") Result_1 = client_msg.decode('utf-8') #中文 print(f"Client message: {Result_1}") conn.send(client_msg.upper()) conn.close() if __name__ == '__main__': while True: func1() ############ 客户端脚本的内容:(D:\yy.py) #coding=utf-8 import socket def func1(): try: client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect(('192.168.168.130', 886)) #连接服务器端的IP地址和端口 Message_1 = '大家好,Welcome to zhuohua.' #信息内容 client.send(Message_1.encode('utf-8')) #将信息发送给服务器端 print("信息发送成功。") back_msg = client.recv(1024) client.close() except Exception as e: print("信息发送失败,原因: %s" % e) if __name__ == '__main__': func1() ############ 测试: 先运行服务器端脚本,并处于接收状态:(组合键Ctrl+c可结束脚本的运行) 图片1.png 运行一次客户端脚本: 图片2.png 服务器端接收到客户端传来的信息: 图片3.png 注释:客户端IP地址为 192.168.168.132/24 客户端多次运行脚本,就可以多次发送信息: 图片4.png 服务器端不终止脚本就可以一直接收客户端发送来的信息: 图片5.png ############ ############ 例子二: 服务器端脚本的内容: [root@Zabbix_server_01 ~]# cat xx.py #coding=utf-8 import socket server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(('192.168.168.130', 886)) server.listen(15) #最大连接数 print('starting......') def func1(): conn, addr = server.accept() client_msg = conn.recv(1024) print(f"接收到来自客户端({addr[0]})的信息") conn.send(client_msg.upper()) conn.close() Result_1 = client_msg.decode('utf-8') Result_2 = f"来自客户端({addr[0]})的信息: {Result_1}" func2(Result_2) def func2(Result_2): #把接收到的信息写入(追加)到指定文件 Path_1 = "./1.txt" f_name = open(Path_1,'a') print(Result_2,file=f_name) if __name__ == '__main__': while True: func1() ############ 客户端脚本的内容:(D:\yy.py) #coding=utf-8 import socket def func1(): try: client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect(('192.168.168.130', 886)) #连接服务器端的IP地址和端口 Message_1 = '大家好,Welcome to zhuohua.' #信息内容 client.send(Message_1.encode('utf-8')) #将信息发送给服务器端 print("信息发送成功。") back_msg = client.recv(1024) client.close() except Exception as e: print("信息发送失败,原因: %s" % e) if __name__ == '__main__': func1() ############ 测试: 先运行服务器端脚本,并处于接收状态:(组合键Ctrl+c可结束脚本的运行) 图片6.png 客户端多次运行脚本,就可以多次发送信息: 图片7.png 服务器端不终止脚本就可以一直接收客户端发送来的信息: 图片8.png 服务器端的文件记录到的信息: [root@Zabbix_server_01 ~]# cat 1.txt 来自客户端(192.168.168.132)的信息: 大家好,Welcome to zhuohua. 来自客户端(192.168.168.132)的信息: 大家好,Welcome to zhuohua. 来自客户端(192.168.168.132)的信息: 大家好,Welcome to zhuohua. [root@Zabbix_server_01 ~]# ############ ############ 例子三: 服务器端脚本的内容: [root@Zabbix_server_01 ~]# cat xx.py #coding=utf-8 import socket server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(('192.168.168.130', 886)) server.listen(15) #最大连接数 print('starting......') def func1(): conn, addr = server.accept() client_msg = conn.recv(1024) print(f"接收到来自客户端({addr[0]})的信息") conn.send(client_msg.upper()) conn.close() Result_1 = client_msg.decode('utf-8') func2(Result_1) def func2(Result_1): #把接收到的数据写入(追加)到指定文件 Path_1 = "./1.log" f_name = open(Path_1,'a') print(Result_1,file=f_name) if __name__ == '__main__': while True: func1() ############ 客户端脚本的内容:(D:\yy.py) #coding=utf-8 import socket def func1(Message_1): try: client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect(('192.168.168.130', 886)) #连接服务器端的IP地址和端口 client.send(Message_1.encode('utf-8')) #将信息发送给服务器端 print("信息发送成功。") back_msg = client.recv(1024) client.close() except Exception as e: print("信息发送失败,原因: %s" % e) if __name__ == '__main__': Message_1 = '大家好,Welcome to zhuohua.' #信息内容 func1(Message_1) Message_1 = '大家好,Welcome to Python.' func1(Message_1) Message_1 = '大家好,Welcome to Mary.' func1(Message_1) ############ 测试: 先运行服务器端脚本,并处于接收状态:(组合键Ctrl+c可结束脚本的运行) 图片9.png 运行一次客户端脚本:(一次性发送三条信息) 图片10.png 服务器端接收到客户端传来的信息: 图片11.png 服务器端的文件记录到的信息: [root@Zabbix_server_01 ~]# cat 1.log 大家好,Welcome to zhuohua. 大家好,Welcome to Python. 大家好,Welcome to Mary. [root@Zabbix_server_01 ~]# ############ ############ 例子四:( 服务器连接公网安装第三方库(PyMySQL)可参考:Python3脚本管理Linux下的MySQL ) 服务器端脚本的内容: [root@Zabbix_server_01 ~]# cat xx.py #coding=utf-8 import socket import pymysql server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(('192.168.168.130', 886)) server.listen(28) #最大连接数 print('starting......') def func1(): conn, addr = server.accept() client_msg = conn.recv(1024) print(f"接收到来自客户端({addr[0]})的信息") conn.send(client_msg.upper()) conn.close() Result_1 = client_msg.decode('utf-8') Key_1 = Result_1.split(",")[0] Key_2 = Result_1.split(",")[1] Key_3 = Result_1.split(",")[2] #数据类型为字符串 Key_3 = float(Key_3) insert_record(Key_1,Key_2,Key_3) def insert_record(Key_1,Key_2,Key_3): db = pymysql.connect("localhost", "root", "888", "data1",3306,charset="utf8") cursor = db.cursor() Sql_1 = f"INSERT INTO table1(name,address,math) VALUES('{Key_1}','{Key_2}',{Key_3})" #SQL语句 cursor.execute(Sql_1) #执行SQL语句 db.commit() #把执行任务提交到数据库 db.close() if __name__ == '__main__': while True: func1() ############ 客户端脚本的内容:(D:\yy.py) #coding=utf-8 import socket def func1(): try: client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect(('192.168.168.130', 886)) #连接服务器端的IP地址和端口 Message_1 = 'zhuohua' Message_2 = '中国' Message_3 = '68.5' #数据类型必须为字符串 list_1 = [Message_1,Message_2,Message_3] #列表 Key_1 = ',' Key_2 = Key_1.join(list_1) client.send(Key_2.encode('utf-8')) #将信息发送给服务器端 back_msg = client.recv(1024) client.close() except Exception as e: print("信息发送失败,原因: %s" % e) else: print("信息发送成功。") if __name__ == '__main__': func1() ############ 测试: 先运行服务器端脚本,并处于接收状态:(组合键Ctrl+c可结束脚本的运行) 图片12.png 运行一次客户端脚本: 图片13.png 服务器端接收到客户端传来的信息: 图片14.png 服务器端的数据库记录到的信息: 图片15.png 相关文章: split()函数 join()函数 CentOS6使用Socket(检测TCP端口)

图片附件: 图片1.png (2022-3-11 15:24, 19.88 KB) / 下载次数 88
http://blog.zhuohua.store/attachment.php?aid=19193&k=63fd8305550e67b2420ddbccc9f9ccfe&t=1714625598&sid=Lf9xwL



图片附件: 图片2.png (2022-3-11 15:25, 11.27 KB) / 下载次数 99
http://blog.zhuohua.store/attachment.php?aid=19194&k=b02c18573197275bc10fdc53728c576e&t=1714625598&sid=Lf9xwL



图片附件: 图片3.png (2022-3-11 15:25, 24.63 KB) / 下载次数 82
http://blog.zhuohua.store/attachment.php?aid=19195&k=c64728142d0a982f55161cc3f2a11f46&t=1714625598&sid=Lf9xwL



图片附件: 图片4.png (2022-3-11 15:25, 16.13 KB) / 下载次数 100
http://blog.zhuohua.store/attachment.php?aid=19196&k=1f9beabcd59fa409ff853ae9c73c1ceb&t=1714625598&sid=Lf9xwL



图片附件: 图片5.png (2022-3-11 15:25, 27.55 KB) / 下载次数 98
http://blog.zhuohua.store/attachment.php?aid=19197&k=bebf3a9dd8761646e03eadbb8911d1a5&t=1714625598&sid=Lf9xwL



图片附件: 图片6.png (2022-3-11 15:27, 19.88 KB) / 下载次数 87
http://blog.zhuohua.store/attachment.php?aid=19198&k=d10d50be02908e0fa622621652671006&t=1714625598&sid=Lf9xwL



图片附件: 图片7.png (2022-3-11 15:27, 13.98 KB) / 下载次数 89
http://blog.zhuohua.store/attachment.php?aid=19199&k=7a1224ba3b053de4c5dce2248b95805a&t=1714625598&sid=Lf9xwL



图片附件: 图片8.png (2022-3-11 15:27, 15.74 KB) / 下载次数 89
http://blog.zhuohua.store/attachment.php?aid=19200&k=1f8530aaf261cdfac8c842b9cb82ae53&t=1714625598&sid=Lf9xwL



图片附件: 图片9.png (2022-3-11 15:29, 19.88 KB) / 下载次数 94
http://blog.zhuohua.store/attachment.php?aid=19201&k=f1e0f198492dd155345dbd1e4f89060f&t=1714625598&sid=Lf9xwL



图片附件: 图片10.png (2022-3-11 15:29, 11.87 KB) / 下载次数 95
http://blog.zhuohua.store/attachment.php?aid=19202&k=7ff13e84d47bbffd5f597c7bd11008b4&t=1714625598&sid=Lf9xwL



图片附件: 图片11.png (2022-3-11 15:29, 15.69 KB) / 下载次数 100
http://blog.zhuohua.store/attachment.php?aid=19203&k=5da935ec3d65a9bc7a85ef878f0dce83&t=1714625598&sid=Lf9xwL



图片附件: 图片12.png (2022-3-11 15:31, 19.88 KB) / 下载次数 94
http://blog.zhuohua.store/attachment.php?aid=19204&k=0150692c3ee9401ca3a4e2de51769f96&t=1714625598&sid=Lf9xwL



图片附件: 图片13.png (2022-3-11 15:31, 11.27 KB) / 下载次数 110
http://blog.zhuohua.store/attachment.php?aid=19205&k=e7bd89ddbc94985b0e44949cddaf0021&t=1714625598&sid=Lf9xwL



图片附件: 图片14.png (2022-3-11 15:31, 7.82 KB) / 下载次数 82
http://blog.zhuohua.store/attachment.php?aid=19206&k=bde80e85307b9f87ff8d102f3b909377&t=1714625598&sid=Lf9xwL



图片附件: 图片15.png (2022-3-11 15:31, 7.21 KB) / 下载次数 91
http://blog.zhuohua.store/attachment.php?aid=19207&k=a582c53c08c59c194b5f71e4dac3d2e3&t=1714625598&sid=Lf9xwL






欢迎光临 blog.zhuohua.store (http://blog.zhuohua.store/) Powered by Discuz! 7.2