python 服务器程序_python 服务器端程序

#if len(data) &lt= 0:

# break

#client_socket.send(data)

#continue

header = self.get_header(client_socket)

print struct.unpack("=%dB" % len(header), header)

body = self.get_body(client_socket)

# 解析数据

if not self.process_data(header, body, client_socket):

client_socket.sendall(header + self.make_body(body))

print "【网关】", body

###############################################################################

# 模拟线服务器 #

###############################################################################

class my_server:

def __init__(self):

print "Server init...\n"

def __del__(self):

print "Server del...\n"

def make_game_header(self, cmd, seq):

ret = struct.pack("=BBH", 0x68, seq, cmd)

return ret

def make_header(self, cmd, gate_index, line_index):

ret = struct.pack("=BBHH", 0x69, cmd, gate_index, line_index)

return ret

def make_body(self, data):

length = len(data)

ret = struct.pack("=H", length)

# 加密data ........

#tmp = struct.unpack("=%dB" % length, data)

#tmp2 = []

#for c in tmp:

# tmp2.append(c ^ 0xAA)

#data = struct.pack("=%dB" % length, *(i for i in tmp2))

# 加密end

ret += data

return ret

# 接收指定长度的数据

def get_respond(self, s, expect_len):

buf = ""

while len(buf) &lt expect_len:

data = s.recv(expect_len - len(buf))

if not data:

# 连接断开

raise Exception("服务器连接断开")

buf += data

return buf

def get_header(self, s):

return self.get_respond(s, 6)

def get_body(self, s):

ret = self.get_respond(s, 2)

data = struct.unpack("=H", ret)

print "Data len %d" % data[0]

length = data[0]

data = self.get_respond(s, length)

# 解密data ........

#tmp = struct.unpack("=%dB" % length, data)

#tmp2 = []

#for c in tmp:

# tmp2.append(c ^ 0xAA)

#data = struct.pack("=%dB" % length, *(i for i in tmp2))

# 解密end

return data

def process_data(self, header, body, client_socket):

flag, type, gate_index, server_index = struct.unpack("=BBHH", header)

if type == 0x02: #控制块释放命令

return 2

# 取游戏包头

game_header = body[0 : 4]

#print struct.unpack("=4B", body[0:4])

flag, seq, command = struct.unpack("=BHB", game_header)

if command == 0x02:

# 登陆包

game_body = body[6 : ]

# print struct.unpack("=%dB" % len(body[4:]), body[4:])

line_no, user, password = struct.unpack("=B16s32s", game_body)

print "【线服务器】用户 %s 密码 %s 登陆到服务器 %d" % (user, password, line_no)

# 组游戏包

game_pkt = self.make_game_header(0x82, 0) + self.make_body(struct.pack("=B", 0))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Python客户端/服务器程序的示例: 服务器端程序: ```python import socket # 创建套接字 server_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定IP和端口号 server_sock.bind(('127.0.0.1', 8888)) # 监听客户端连接 server_sock.listen() print('等待客户端连接...') while True: # 接收客户端连接 conn, addr = server_sock.accept() print(f'客户端 {addr[0]}:{addr[1]} 已连接。') # 接收客户端消息 msg = conn.recv(1024) print(f'接收到消息:{msg.decode()}') # 发送响应消息 conn.send('服务器已接收到消息!'.encode()) # 关闭连接 conn.close() ``` 客户端程序: ```python import socket # 创建套接字 client_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 连接服务器 client_sock.connect(('127.0.0.1', 8888)) # 发送消息 client_sock.send('Hello, server!'.encode()) # 接收响应消息 response = client_sock.recv(1024) print(f'接收到响应:{response.decode()}') # 关闭连接 client_sock.close() ``` 在以上程序中,服务器使用`socket`模块创建一个TCP/IP套接字,并使用`bind()`函数将其绑定到指定的IP地址和端口号。然后,通过`listen()`函数开始监听客户端连接请求。 当客户端连接成功后,服务器使用`accept()`函数接受客户端连接,并通过`recv()`函数接收客户端发送的消息。然后,服务器通过`send()`函数将响应消息发送回客户端,并关闭连接。 客户端也使用`socket`模块创建一个TCP/IP套接字,并使用`connect()`函数连接到服务器。然后,客户端使用`send()`函数向服务器发送消息,通过`recv()`函数接收服务器发送的响应消息,并最终关闭连接。 请注意,此示例程序仅用于演示目的,实际的生产环境可能需要考虑更多的错误处理、安全性和性能方面的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值