码迷,mamicode.com
首页 > 编程语言 > 详细

python小练习---TCP服务器端

时间:2017-06-04 12:43:53      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:img   tin   通过   from   threading   blog   and   encode   开始   

针对于上一篇分享
python小练习---TCP客户端 http://www.cnblogs.com/zhaijiahui/p/6926197.html
我继续按书中内容,向下进行
这里需要强调一个事
py3在使用 send() 和 recv() 的时候会出现
TypeError: a bytes-like object is required, not ‘str‘
解决方法:
send() 里面的内容用 encode(‘utf-8’) 编码发送
recv() 用 decode(‘utf-8’) 解码接收

好,这个问题解决了,可以结合前面的客户端,建立一个完整的TCP通信

# -*- coding:utf-8 -*-
# 创建客户端,类似于浏览器发送请求

import socket

target_host = "127.0.0.1" # 127.0.0.1
target_port = 9999

client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 创建TCP连接
client.connect((target_host,target_port))

inputs = "zhaijh111"
client.send(inputs.encode("utf-8"))
response = client.recv(4096).decode("utf-8")

print(response)

 


下面是服务器端

# -*- coding:utf-8 -*-
# 接收器
import socket
import threading

bind_ip = "0.0.0.0"
bind_port = 9999
size = 4096

server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 将套接字绑定到地址, 在AF_INET下,以元组(host,port)的形式表示地址.
server.bind((bind_ip,bind_port))
# 开始监听TCP传入连接。backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数量。
# 该值至少为1,大部分应用程序设为5就可以了。
server.listen(5)

print("[*] Listening on %s:%d" % (bind_ip,bind_port)) # 1

def handle_client(client_socket):

request = client_socket.recv(size).decode("utf-8")
print("[*] Received: %s" % request)

reply = "ACK!"
client_socket.send(reply.encode("utf-8"))
client_socket.close()

while True:
# print("waiting for connection...")
client,addr = server.accept() # 2
# 接受TCP连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址。

print("[*] Accepted connection from: %s:%d" % (addr[0],addr[1]))

client_handler = threading.Thread(target=handle_client,args=(client,)) # 3
client_handler.start()

 

运行结果:
技术分享


我们分析一些服务器端程序
1、 服务器建立TCP套接字,并绑定连接,打印监听端口
2、 服务器接收到客户端的connect 建立连接成功,打印Accepted connection
3、 通过线程调用handle_cliet() ,接收信息,并返回一个ACK!
注意期间发送的字符串,在py3中需要做编码,我前面提到的

 

python小练习---TCP服务器端

标签:img   tin   通过   from   threading   blog   and   encode   开始   

原文地址:http://www.cnblogs.com/zhaijiahui/p/6939908.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!