写一个类继承socket时遇到的问题(TCP)
主要为题出在服务器端的accept()函数,他返回两个参数,一个套接字和一个客户端的ip和端口组成的元组。
问题就出在这个套接字这里,我们继承了socket这个类,这个套接字创建的时候是通过socket创建的,
后面我们不可以直接使用它,因为它调用的方法都是socket的方法,所以我们只能将他作为参数,传来传去。
代码见下:
import socket class My_socket(socket.socket): def __init__(self, encoding='utf-8'): self.encoding = encoding super(My_socket, self).__init__() def mysend(self, data): return super(My_socket, self).send(data.encode(self.encoding)) def my_send(self, data, conn): return conn.send(data.encode(self.encoding)) def myrecv(self, num): msg = super(My_socket, self).recv(num).decode(self.encoding) return msg def my_recv(self, buffersize, conn): msg = conn.recv(buffersize).decode(self.encoding) return msg
import my_TCP sk = my_TCP.My_socket() sk.bind(('127.0.0.1', 7084)) sk.listen(4) while 1: conn, addr = sk.accept() print(conn, type(conn)) while 1: res_s = sk.my_recv(1024, conn) print(res_s) if res_s == 'q': break res_f = input('>>>>>') sk.my_send(res_f, conn) if res_f == 'q': break conn.close() sk.close()
import my_TCP sk = my_TCP.My_socket() adress = ('127.0.0.1', 7084) sk.connect(adress) while 1: meg = input('>>>') sk.mysend(meg) if meg == 'q': break res_s = sk.myrecv(1024) if res_s == 'q': break print(res_s) sk.close()