转载请注明作者及出处:
python的强大我们都有目共睹,它有着丰富的标准库与第三方库,以及各路大佬写好的框架供我们使用。python以使用方便简洁等优点在众多开发语言中脱颖而出,通常某些语言十几行才能解决的问题,用python三行就解决了。
本文将带领大家使用python的socket模块,编写基于TCP协议的服务端及客户端工具,大家可以根据本文讲述的这两款工具继续向下扩展开发,比如可以根据本文代码的思路,扩展出自己的自动回复消息工具。
话不多说,上代码
服务端代码:
import socket
language = {'你叫什么':'我叫鸣人',
'你家住哪':'火之国木叶忍者村5号楼4单元301室',
'你爱吃什么':'拉面',
'你的梦想是什么':'成为火影',
'你喜欢谁':'佐助',
'雏田知道你喜欢佐助吗':'知道',
'你是gay吗':'サスケ?'}
HOST = "127.0.0.1"
PORT = 2333
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((HOST,PORT))
s.listen(1)
print("Listing at port 2333")
conn,addr = s.accept()
print('Connect by: ',addr)
while True:
data = conn.recv(1024)
data = data.decode()
if not data:
break
print('Received message:',data)
conn.sendall(language.get(data,'你说什么?').encode())
conn.close()
s.close()
首先,我们定义了一个名为language的常量,这个常量中包含了一个字典,字典中的内容分别是客户端输入的内容以及服务端对客户端做出的回应。
再往下,我们定义了工具运行的IP地址127.0.0.1(本地回环地址)和监听端口2333,接下来我们建立了一个socket对象,并将这个socket对象与之前定义的IP地址和端口绑定,并且我们将最大监听数设置为1,也就是说这个TCP服务端只能同时和一个TCP客户端进行交互,并且在这个服务端成功运行时会输出“Listing at port 2333”。
在服务端与客户端成功连接后会输出服务端IP地址,以及客户端向服务端进行通信的端口号。
接下来进入while循环,当客户端向服务端发送内容时,服务端会在本地显示出客户端输入的内容,并且当客户端发送的内容不存在于languag常量时,服务端会向客户端发送‘ 你说什么?’。
客户端代码:
import socket
import sys
HOST = "127.0.0.1"
PORT = 2333
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
s.connect((HOST,PORT))
except Exception as e:
print('那个小伙不在,快找找他去哪了')
sys.exit()
while True:
c = input('你想问什么:')
s.sendall(c.encode())
data = s.recv(1024)
data = data.decode()
print('金发小伙:',data)
if c.lower()=='拜拜':
break
s.close()
使用TCP进行通信,需要在客户端和服务端建立链接,并且要在通信结束后关闭链接释放资源。由于TCP是面向链接的,因此相对于UDP提供更高的可靠性。
现在,我们将刚才编写的TCP客户端及服务端运行起来,看看会有什么效果(记得先运行服务端,不然那个小伙会走丢哦)
既然能看到这篇文章,那你心中一定有梦想,希望大家能坚持自己的忍道一路走下去,祝大家都成为火影,继承影之名号、火之意志!加油!
本文转载自: https://blog.csdn.net/m0_68080066/article/details/128055586
版权归原作者 超级大黑兔 所有, 如有侵权,请联系我们删除。
版权归原作者 超级大黑兔 所有, 如有侵权,请联系我们删除。