Python语言网络编程-基于socket的简易通信

Python语言网络编程-基于socket的简易通信

由于意※义※不※明的人工智能课程大作业要求,我花了一下午的时间重新学习了Python语言的网络编程以探求project的网络编程部分的代码实现过程,并最终选择通过socket套接字的方式实现Python语言的简易网络编程。
(今年上半年我也有写过C语言编写的基于Winsock的Windows网络编程,感兴趣的朋友可以看这里:服务器端客户机端

编程思路

由于此部分网络编程是包含在大程序中的一个小的通信模块,因此只需实现基本的信息传递功能即可,即编辑socket打开连接并完成初步的信息传递即可。
下面附上的代码块分别为server端和client端的Python语言代码,开发工具为vscode,调试时先运行server再运行client端即可。
话不多说,接下来直接上代码,详细的注释已经附在代码块中。

编程代码(Server端)

import socket
 
ip_port = ('127.0.0.1',1234) #设置主机IP地址和端口
back_log = 5                 #设置客户端最大监听数量
buf_size = 1024
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)   # 初始化TCP连接的socket
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)  # 对socket的配置重用ip和端口号
s.bind(ip_port)  #  绑定端口号和socket
s.listen(back_log)  # 设置socket端监听对象链接
print("成功创建socket,等待client端链接中...")
while True:
    c,address = s.accept()  # 阻塞式等待client端的链接
    print("接收到来自{}地址的client端连接".format(address))
    while 1:
        try:
            msg = c.recv(buf_size)
            if msg.decode('utf-8') == 'end':             
                c.close()  # 断开连接
            print('服务器接受到来自client端消息',msg.decode('utf-8'))
        except Exception as e:
            break
s.close() #关闭监听主socket,服务端程序结束

编程代码(Client端)

import socket
 
p = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#创建socket并设置server端连接的IP地址和端口
ip1=(input("请输入server端的IP地址"))
p.connect((ip1,1234))
while 1:
    print("已连接到ip为{}的server端".format(ip1))  # 连接成功时将server端ip地址反馈到client端
    msg = input('请输入传递给server端的信息,传递消息以end结尾时,停止向server端传递信息')
    if not msg:     # 设置if判断防止client端输入空消息
        continue
    p.send(msg.encode('utf-8'))  # 使用utf-8的编码方式进行信息传递
    if msg == 'end':
        print("检测到传输的end命令,连接已断开!")
        break       
p.close()

注意事项

1.为保证调试方便,server中指定的主机ip设置为127.0.0.1,监听端口设置为1234.
2.client端代码只能设置连接到主机的ip地址,监听端口默认为1234不变。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值