python网络编程---TCP服务器

0x01 环境

python2 pycharm

0x02 程序

客户端程序:

# -*- coding:UTF-8 -*-
import socket
'''
target_host='www.baidu.com'
target_port=80
'''
target_host='localhost'
target_port=3345
data='ABCDEF'

# 创建一个socket对象
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 连接客户端
client.connect((target_host,target_port))
# 发送一些数据
#client.send("GET / HTTP/1.1\r\nHost:baidu.com\r\n\r\n")
client.send(data)
# 接收一些数据
response=client.recv(4096)
print response

服务器端程序:

# -*- coding:utf-8 -*-
import socket
import threading

bind_ip="localhost"
bind_port=3345

server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind((bind_ip,bind_port))
server.listen(1)

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

#这是客户处理线程
def handle_client(client_socket):
    #打印客户端发送得到的东西
    request = client_socket.recv(1024)
    print "[*] Received:%s" % request
    #返回一个数据包
    client_socket.send("ACK")
    client_socket.close()

while True:
    client,addr=server.accept()
    print addr
    print "[*] Accepted connection from: %s:%d" %(addr[0],addr[1])
    #挂起客户端程序,处理传入的数据
    client_handler=threading.Thread(target=handle_client,args=(client,))
    #target是线程需要去执行的函数名,args是一个元组,是函数的参数
    client_handler.start()

0x03 解释

客户端程序我就不解释了,我在另一篇解释的很详细,不明白可以到这里看
https://blog.csdn.net/qq_41683305/article/details/113809707
服务端程序:

server.bind((bind_ip,bind_port))

bind(address):绑定地址(host,port)到套接字, 在 AF_INET下,以元组(host,port)的形式表示地址。

server.listen(1)

listen(backlog):开始 TCP 监听。backlog 指定在拒绝连接之前,操作系统可以挂起的最大连接数量

client,addr=server.accept()

accept():接受一个客户端的连接请求,不同于以上socket()返回的用于监听和接受客户端的连接请求的套接字,与客户端通信是通过这个新的套接字上发送和接收数据来完成的,每个连接进来的客户端,都会通过accept函数返回一个不同的客户端socket对象和属于客户端的套接字,client就是新的套接字,addr是一个元组,存放的第一个元素是客户端IP,第二个是端口

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

Thread是一个类,创建一个新的线程对象,target指定调用的函数,args指定调用函数的参数,是一个元组,后面要加一个’,’ ,当调用start函数时,就回去执行这个函数

0x04 远行结果

先运行服务端程序,再运行客户端程序
服务器端结果:
python网络编程---TCP服务器_第1张图片
客户端结果:
python网络编程---TCP服务器_第2张图片

你可能感兴趣的:(Black,Python编程)