侵权投诉
订阅
纠错
加入自媒体

python修炼 - UDP、TCP

2019-02-19 11:24
QYFabc
关注

今日思维导图

python修炼 - UDP、TCP

python修炼 - UDP、TCP

每日代码

udp聊天器

import socket

"""

这段代码可以实现循环进行收发消息,但是同一时间只能进行一个动作

"""

def send_msg(udp_socket):

"""发送数据"""

# 发送数据

client_ip = input("请输入对方ip: ")

client_port = int(input("请输入对方端口:"))

send_data = input("请输入要发送的内容:")

# 发送数据,使用encode进行编码,ip和端口要放在元组中

udp_socket.sendto(send_data.encode("utf-8"), (client_ip, client_port))

def recv_msg(udp_socket):

"""接收数据"""

# 接收数据 ,需要指定要接收的字节,1024就是 1KB

recv_data = udp_socket.recvfrom(1024)

# recvfrom返回的数据时一个元组,第一个元素是地址,第二个元素是接收到的消息

# 使用decode 进行解码

print("%s: %s" % (str(recv_data[1]), recv_data[0].decode("utf-8")))

def main():

# 创建套接字

udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 绑定本地信息,可以知道ip和端口

udp_socket.bind(("", 6666))

while True:

print("---udp聊天器---")

print("1. 发送数据")

print("2. 接收数据")

print("0. 退出")

op = input("请输入要进行的操作")

if op == "1":

# 调用发送数据的函数

send_msg(udp_socket)

elif op == "2":

# 调用接收数据的函数

recv_msg(udp_socket)

elif op == "0":

break

else:

print("输入有误,请重新输入")

udp_socket.close()

if __name__ == "__main__":

main()

tcp服务器代码

import socket

"""tcp服务器"""

def main():

# 创建套接字, tcp的参数时SOCK_STREAM

tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定本地地址, 本地地址和端口可能需要重新指定

tcp_socket.bind(("", 6666))

# 由主动变成被动接听, listen方法可以指定同时连接的客户端

tcp_socket.listen(128)

while True:

# 循环接听客户

# 等待客户端连接, 当有客户连接,accept方法返回一个元组

# 元组第一个元素是一个新的套接字,只针对于当前连接的这个客户端;第二个元素是客户端地址

colient_socket, colient_addr = tcp_socket.accept()

# 接收数据

print(colient_addr)

while True:

# 循环和同一个客户端联系

colient_data = colient_socket.recv(1024)

print(colient_data.decode("utf-8"))

if colient_data:

# 进行判断,只有客户端还在发送数据,就返回一个数据给客户端

# 发挥一部分数据给客户端

colient_socket.send("嘿嘿嘿".encode("utf-8"))

else:

# 没有数据就

break

# 关闭套接字

colient_socket.close()

tcp_socket.close()

if __name__ == "__main__":

main()

tcp客户端代码

import socket

"""tcp客户端"""

def main():

# 创建套接字

tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 链接服务器,  tcp客户端需要先链接服务器

tcp_socket.connect(("192.168.xxx.xxx", 6666))

while True:

# 循环和服务器联系

# 发送数据

print("输入【exit】退出链接")

send_data = input("请输入要发送的数据:")

if send_data == "exit":

break

tcp_socket.send(send_data.encode("utf-8"))

# 接收服务器返回的数据

server_data = tcp_socket.recv(1024)

print(server_data.decode("utf-8"))

# 关闭套接字

tcp_socket.close()

if __name__ == "__main__":

main()

在 tcp 这里碰见了一个奇怪的BUG

服务器和客户端运行起来后,输入正常数据没有问题,当只输入一个回车时,程序不发送数据也不接受数据只能强行接受,问了下,没有解决,这玩意好像是因为操作系统底层的原因, 后面再研究研究。

python修炼 - UDP、TCP

今天内容需要记忆和理解都比较多,不过还算可以接受。

最近在试着使用 Typora 练习 Markdown 写作方式,不是很熟练,写出来有点乱,慢慢练习熟练了再使用这种方式吧。

声明: 本文由入驻维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。

发表评论

0条评论,0人参与

请输入评论内容...

请输入评论/评论长度6~500个字

您提交的评论过于频繁,请输入验证码继续

暂无评论

暂无评论

文章纠错
x
*文字标题:
*纠错内容:
联系邮箱:
*验 证 码:

粤公网安备 44030502002758号