python创建简单的客户端和服务器

TCP客户端

import socket
target_host="www.baidu.com"
target_port=80
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)            # 建立一个包含AF_INET,SOCK_STREAM参数的socket对象。其中AF_INET说明使用的是标准的IPv4,SOCK_STREAM(面向连接)说明这将是一个TCP客户端。
client.connect((target_host,target_port))                                            # 连接客户端
client.send("GET / HTTP/1.1\r\nHost: baidu.com\r\n\r\n")             # 发送一些数据
response=client.recv(6049)                                                                               # 接受一些数据
print response

UDP客户端

import socket
target_host="127.0.0.1"
target_port=80
client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)              # 建立一个socket对象,套接字类型改为SOCK_DGRAM(非连接)
client.sendto( "AAABBBCCC",(target_host,target_port))                  # 调用 sendto()(发送UDP数据)函数将数据发送到想要发送的服务器上,因为UDP是无连接状态的传输协议
data,  addr=client.recvfrom(4096) # 调用recvfrom()( 接受UDP数据,与recv()类似,但返回值是(data,address),其中data是包含接受数据的字符串,address是发送数据的套接字地址)接收返回的UDP数据包
print data

TCP服务器

import socket
import threading
bind_ip="0.0.0.0"
bind_port= 9999
server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind((bind_ip,bind_port))                                                                        # 确定服务器需要监听的IP地址和端口
server.listen(5)                                                                                                             # 启动监听,并将最大连接数设为5
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()                                                                             # 当一个客户端成功连接时候,接收到的客户端的套接字对象并保存在变量client中,将远程连接的细节保存在addr中
    print "[*] Accepted connection from: %s:%d" % (addr[0],addr[1])
    client_handler=threading.Thread(target=handle_client,args=(client,))        # 以handle_client函数作为回调函数创建一个新的线程对象,将客户端套接字作为一个句柄传递给它。
    client_handler.start()   


猜你喜欢

转载自blog.csdn.net/qq_41007744/article/details/80246750