python socket.connect注意事项,端口应为int型

import  socket

def port_status(ip,port):

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

    try:

        server.connect((ip,port))
        print('port open')
        server.close()

    except Exception as err:
        print "port closed"

if __name__ == "__main__":
    ip="192.168.1.1"
    port_status(ip,80)
在编辑代码的时候发现执行这个非常缓慢,尝试改成 port_status(ip,'80')后发现也能运行,速度很快,但结果是错的。
即
sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sk.connect('192.168.1.1','80'))  错误,都是显示端口关闭
与
sk.connect('192.168.1.1',80))    正确

port端口的值应为int型。


这段代码的主要功能是采集摄像头中的照片并发送到服务器,其中使用了OpenCV库和Socket库。 以下是对代码的优化建议: 1. 建议将while True循环中的socket连接放在外面,只连接一次即可。 2. 建议在发送数据到服务器前,先判断一下数据的大小是否符合要求,若超出限制可以进行压缩或者分多个包发送。 3. 建议在发送数据时,使用try...except语句进行异常处理,避免发送失败导致程序崩溃。 4. 建议在程序结束时,关闭socket连接和释放摄像头资源,避免资源浪费和异常。 以下是优化后的代码: ```python import cv2 import socket import numpy as np # 创建socket连接 client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 设置服务器地址和端口号 server_address = ('10.132.11.225', 8000) # 连接服务器 try: client_socket.connect(server_address) except socket.error as e: print("Failed to connect to server: {}".format(e)) exit() # 采集摄像头中的照片 cap = cv2.VideoCapture(0) # 检查摄像头是否打开成功 if not cap.isOpened(): print("Failed to open camera") exit() # 发送照片到服务器 while True: # 采集一帧照片 ret, frame = cap.read() # 检查照片采集是否成功 if not ret: print("Failed to capture frame") break # 将照片转换为JPEG格式,并压缩 _, jpeg = cv2.imencode('.jpg', frame, [int(cv2.IMWRITE_JPEG_QUALITY), 70]) # 判断数据大小是否符合要求 if len(jpeg) > 1024 * 1024: print("Data size too large") continue # 将JPEG数据转换为numpy数组,发送到服务器 data = np.array(jpeg).tobytes() # 发送数据到服务器 try: client_socket.sendall(data) # 接收确认信息 response = client_socket.recv(1024) if response != b'OK': print("Failed to receive response from server") break except socket.error as e: print("Failed to send data to server: {}".format(e)) break # 等待按下ESC键退出循环 if cv2.waitKey(1) == 27: break # 关闭socket连接和摄像头 client_socket.close() cap.release() cv2.destroyAllWindows() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值