继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

python学习笔记之初识socket

zxy1024
关注TA
已关注
手记 2
粉丝 12
获赞 36

    我们都知道,在网络中通过IP地址来识别主机,在一台主机中通过端口号来识别不同的应用进程,那么把IP地址和端口号组合起来就可以唯一地识别网络中一台主机及其上的一个应用,这个组合就是套接字(socket),它实际上就是一个通信断点,即

                                    套接字=(主机IP地址,端口号)

    在使用python开发项目的时候可以使用很多第三方python工具创建网络客户端和服务端,这些工具的核心模块是socket模块。

直接上代码。

建立TCP客户端

import socket

#目标主机
target_add="www.baidu.com"
#端口号
target_port = 80

#建立一个socket对象
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

#连接客户端
client.connect((target_add,target_port))

#发送一些数据
client.send(("GET / HTTP/1.1\r\nHost:baidu.com\r\n\r\n").encode())

#接收一些数据
response = client.recv(1024)
print(response)

建立UDP客户端

import socket

#目标主机
target_add="127.0.0.1"
#端口号
target_port = 80

#建立一个socket对象
client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)  #这里由socket.SOCK_STREAM改为socket.SOCK_DGRAM

#发送一些数据
client.sendto(("ASDFGHJKL").encode(),(target_add,target_port))  #这里是sendto

#接收一些数据
data,addr = client.recvfrom(1024)  #这里是recvfrom
print(data)

    这两个客户端一看长得差不多,UDP客户端代码在TCP客户端代码上面稍微改一下就可以了。写UDP客户端时没有连接,这是因为UDP是一个无连接的传输协议。

    客户端写了,那么来写一个服务端。

TCP服务端

import socket
import threading

bind_ip = "127.0.0.1"
bind_port = 9999

server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

#启动监听
server.bind((bind_ip,bind_port))
#最大连接数设置为5
server.listen(5)

print(("[*] listeing on %s:%d" % (bind_ip,bind_port)).encode())

#客户处理线程
def handle_client(client_socket):
    request = client_socket.recv(1024)
    print(("[*] received: %s" % request).encode())

    client_socket.send(("ACK").encode())
    client_socket.close()
while True:
    #将接收到的客户端套接字对象保存到client中,将远程连接的细节保存到addr中
    client,addr = server.accept()
    print("[*] accepted connection from: %s:%d" % (addr[0],addr[1]))
    #创建线程对象
    client_handler = threading.Thread(target=handle_client,args=(client,))
    #启动线程
    client_handler.start()

    把上面的TCP客户端代码改下IP和端口,运行这两段代码,让它们实现通信,运行后服务器端会得到这样的结果

b'[*] listeing on 127.0.0.1:9999'
[*] accepted connection from: 127.0.0.1:3331
b"[*] received: b'asd'"


TCP客户端代码给成这样就行了:

import socket

#目标主机
target_add="127.0.0.1"
#端口号
target_port = 9999

#建立一个socket对象
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

#连接客户端
client.connect((target_add,target_port))

#发送一些数据
client.send(("asd").encode())

#接收一些数据
response = client.recv(1024)
print(response)



打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP