Python-TCP模拟QQ聊天-对象版
客户端
from socket import *
from threading import Thread
# 创建套接字
tcp_client = socket(AF_INET, SOCK_STREAM)
# 链接服务器
connect_address = ('192.168.28.44', 8888)
tcp_client.connect(connect_address)
class Send(Thread):
def __init__(self,tcp_client):
super().__init__()
self.tcp_client = tcp_client
def run(self):
self.send_data()
def send_data(self):
while True:
# 发送数据到服务器
self.content = input('请输入内容:')
self.tcp_client.send(self.content.encode('gb2312'))
class Recv(Thread):
def __init__(self,tcp_client):
super().__init__()
self.tcp_client = tcp_client
def run(self):
self.recv_data()
def recv_data(self):
while True:
# 接收来自服务器的数据
recv_content = self.tcp_client.recv(1024)
if len(recv_content) == 0:
break
print(recv_content.decode('gb2312'))
class Main(object):
Send(tcp_client).start()
Recv(tcp_client).start()
服务端
from socket import *
from threading import Thread
# 创建套接字
tcp_socket = socket(AF_INET,SOCK_STREAM)
# 绑定端口
tcp_socket.bind(('192.168.28.44',8888))
# 设置监听模式
tcp_socket.listen(3)
tcp_socket.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
# 接收数据
class Recv(Thread):
def __init__(self,new_tcp_socket,new_tcp_address):
super().__init__()
self.new_tcp_socket = new_tcp_socket
self.new_tcp_address = new_tcp_address
def run(self):
self.recv_data()
def recv_data(self):
while True:
recv_data = self.new_tcp_socket.recv(1024)
print('%s:%s' % (str(self.new_tcp_address), recv_data.decode('gb2312')))
# 发送数据
class Send(Thread):
def __init__(self,new_tcp_socket):
super().__init__()
self.new_tcp_socket = new_tcp_socket
def run(self):
self.send_data()
def send_data(self):
while True:
send_content = input('请输入内容:')
send_content = '1:12312312312:meinv:mm-pc:32:%s'%send_content
self.new_tcp_socket.send(send_content.encode('gb2312'))
class Main(object):
while True:
# 创建新的套接字和地址
new_tcp_socket, new_tcp_address = tcp_socket.accept()
Recv(new_tcp_socket,new_tcp_address).start()
Send(new_tcp_socket).start()