python/socket的一些常见问题

CSDN话题挑战赛第2期
参赛话题:学习笔记

本文呢,是关于python/socket的一些常见错误的解决。

一、发送时没变为二进制

在python3之后,socket发送信息是需要把发送内容化为二进制的,

如果没有,则会报错:

import socket
Ip = "192.168.0.1"# 此处的IP地址是我乱输入的,正式使用时输入目标的IP
Sans = socket.socket(socket.AF_INEF,socket.SOCK_STREAM)
Sans.connect((Ip,12345))
Sans.send('hello\n'.encode())
#encode是把字符串化为二进制,
#decode是把二进制的字符串化为字符串

Sans.close()


二、无法连接或无法监听

这种情况一般是端口被占用,建议换一个端口;还有一种情况是没有权限。

三、缓冲区大小不够

一般是因为设置的缓冲区不够大,造成堵塞。

后果:只能接受一部分,另一部分会堵在端口,等待下一次接受,造成延迟。

解决方法:

# 客户端

import socket

Sans = socket.socket(socket.AF_INEF,socket.SOCK_STREAM)
Sans.connect(('192.168.0.1',12345))
A = 'jfishduhfsjdfuahhufhs……\n'# 假设传输了10KB内容
Num = len(A.encode())
Sans.send(str(Num).encode())# 发送缓冲区大小
Sans.send(A.encode())
Sans.close()
# 服务端

import socket

Sans = socket.socket(socket.AF_INEF,socket.SOCK_STREAM)
Sans.bind(('192.168.0.1',12345))
Sans.listen(5)
addr,sock = Sans.accept()

A = sock.recv(1024).decode()# 接受缓冲区大小
A = a.strip()# 去除特殊字符
A = int(A)
Info = sock.recv(A).decode()# 接受

sock.close()
Sans.close()

四、没加\n

这个问题我不确定,但是之前我没加\n出错了,加上就没事了。

·小结

文章诺有差错,请在下方评论告知,我会修改文章。

socket中还有很多问题没有解决,

我会尽快解决并发布。

范例socket远程终端

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值