【小白学编程Python方向】项目练习第9期(截止7.27)

    
Python项目练习 第9期
练习时间:7月13日-7月27日(2周)
活动规则:
  • 每一期一个项目,届时会开新帖发布
  • 学员直接将答案提交到该贴评论区即可
  • 两周后,公布导师参考答案
  • 导师评选出当期最佳代码(将设置为精彩回复

奖励:牛客大礼包一份(牛客定制水杯 牛客定制笔 牛客定制程序员徽章 滑稽抱枕)
参与方式:直接将你的代码回复到本帖评论区

-----------------------------------------------------

本期题目:

python实现socket通讯(TCP)


要求:

客户端部分:

运行在31500端口,根据终端的输入,通过socket传给服务器


服务器:

监听31500端口,将收到的信息打印到终端


参与方式:直接将你的代码回复到本帖评论区

#Python#
全部评论
Sever: from socket import *from time import ctime host = ''port = 31500bufsize = 1024HandP = (host, port) tcpSeverSocket = socket(AF_INET, SOCK_STREAM)tcpSeverSocket.bind(HandP)tcpSeverSocket.listen(5) while True: print("waiting for connection...") tcpClientSocket, HandP = tcpSeverSocket.accept() print("...connected from", HandP) while True: data = tcpClientSocket.recv(bufsize) if not data: break data = data.decode('utf-8') respMsg = "[%s]:%s" % (ctime(), data) tcpClientSocket.send(bytes(respMsg, 'utf-8')) print(data) tcpClientSocket.close() tcpSeverSocket.close() * '''Client:''''from socket import * host='127.0.0.1'port=31500bufsize=1024HandP=(host,port) tcpClientSocket=socket(AF_INET,SOCK_STREAM)tcpClientSocket.connect(HandP) while True: data = input(">>> ") if not data: break tcpClientSocket.send(bytes(data,'utf-8')) data=tcpClientSocket.recv(bufsize) if not data: break print(data.decode('utf-8')) tcpClientSocket.close()
点赞 回复 分享
发布于 2018-07-13 23:33
服务端代码 ''' name: Server End author: xyxc0673 created_at: 2018-7-26 ''' import socket import logging import threading class TcpServer: def __init__(self, host, port): # TCP socket config self.host = host self.port = port self.addr = (self.host, self.port) # logging config logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') self.logger = logging.getLogger(__name__) def log(self, message): self.logger.info(message) def listen(self, backlog=5): self.log(f'Server is starting to listen on {self.host}:{self.port}.') self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # socket.AF_INET: ipv4, socket.SOCK_STREAM: tcp self.socket.bind(self.addr) self.socket.listen(backlog) self.log(f'Server is listening with the backlog of {backlog}.') def handler(self, socket, addr): ''' handle message from connection ''' host, port = addr self.log(f'Function handler() for {host}:{port} is on.') socket.send(b'Weclome to The WORLD.') while True: data = socket.recv(1024) # bufsize 1024 means to the max recevied data length data_decoded = data.decode('utf-8') # recved data is bytes-like. self.log(f'Received {data_decoded} from {host}:{port}') # connection closes if message is 'exit' if data_decoded == "exit": socket.send(b'exited') break socket.sendall(f'Message receved: {data_decoded}'.encode('utf-8')) socket.close() self.log(f'Connection from {host}:{port} closed.') def run(self): while True: socket, addr = self.socket.accept() self.log(f'Client {addr[0]}:{addr[1]} is accepted.') th = threading.Thread(target=self.handler, args=(socket, addr)) # start a new thread to handle new connection th.start() if __name__ == "__main__": host = '127.0.0.1' port = 31500 server = TcpServer(host, port) server.listen() server.run() 客户端代码 ''' name: Client End author: xyxc0673 created_at: 2018-7-26 ''' import socket import logging import threading class TcpClient: def __init__(self, host, port): # TCP socket config self.host = host self.port = port self.addr = (self.host, self.port) # logging config logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') self.logger = logging.getLogger(__name__) def log(self, message): self.logger.info(message) def connect(self): self.log(f'Client is starting to connect to {self.host}:{self.port}.') # connect to server self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.socket.connect(self.addr) self.log(f'Client has connected to the server {self.host}:{self.port}.') # Receive message from server message = self.socket.recv(1024).decode('utf-8') self.log(f'Received message {message} from server.') def run(self): while True: user_input = input("Please input: ") self.socket.sendall(user_input.encode('utf-8')) data = self.socket.recv(1024) data_decoded = data.decode('utf-8') self.log(f'Messge from server: {data_decoded}.') if data_decoded == "exited": self.log('Connection has closed.') break if __name__ == "__main__": host = '127.0.0.1' port = 31500 client = TcpClient(host, port) client.connect() client.run()
点赞 回复 分享
发布于 2018-07-26 14:40

相关推荐

10-22 15:25
门头沟学院 C++
种花网友小松:求求你别发了,我几乎都快嫉妒得疯了,倒在床上蒙住被子就开始抱着枕头尖叫流泪,嘴里一边喊着卧槽卧槽,一边又忍着,我边发边哭,打字的手都是抖的,后来我的手抖得越来越厉害,从心头涌起的思想、情怀和梦想,这份歆羡和悔恨交织在一起,我的笑还挂在脸上,可是眼泪一下子就掉下来了。求你了别发了,我生活再难再穷我都不会觉得难过,只有你们发这种东西的时候,我的心里像被刀割一样的痛,打着字泪水就忍不住的往下流。
我的求职进度条
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务