(2)socket的基础使用

socket()模块函数用法

基于TCP协议的套接字程序

netstart -an | findstr 8080 #查看所有TCP和UDP协议的状态,用findstr进行过滤监听8080端口

服务端

import socket

设定套接字协议标准
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #将套接字放入一个变量,这个变量名自定,但是必须要针对项目具有描述性
#socket下有一个socket类,实例化这个类括号里两个参数,套接字模块下有一个AF_INET(基于网络通信的地址家族),socket.Sock_STREAM流式协议就是TCP协议
PS:socket.SOCK_STREAM就是TCP协议,socket.SOCK_DGRAM数据包协议就是UDP协议
PS:服务端有两种套接字,这个是第一种用来绑定端口和监听端口然后做accept的

绑定端口
phone.bind(('127.0.0.1',8080)) #也是两个参数,一个是IP地址,一个是端口号,端口范围0-65535
PS:127.0.0.1这个地址就是本地回环地址,通常开发测试就用这个地址,只有本机客户端才能访问

开始运行监听端口
phone.listen(5) #一个参数就是backlog,就是指定半连接池的数量

等待syn请求
print('start....')
conn,client_addr=phone.accept() #(这个双向链接accept有2个返回值,第一个是连接对象(能收消息也能发消息),第二个是子元祖是客户端的ip和端口,以元祖的形式返回)
PS:这是第二种套接字,这个套接字就是conn,代表着tcp建好的双向通路,用来收发数据
PS:accept就是建立连接,就是去半连接池里面拿取请求

收发消息 #这个功能都是基于第二种套接字conn的
data=conn.recv(1024) #参数就一个,设定最大接收数据的字节数1024Bytes
conn.send(data.upper()) #发消息,把data就是收到的消息变成大写返回
PS:收消息基于方法recv,发消息就是send

关闭conn这个套接字,就是把双向通路关闭
conn.close() #回收资源

关闭第一个套接字
phone.close() #回收资源

 客户端

import socket

设定套接字协议类型
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
PS:客户端就一种套接字,用来收也用来发

设置发送请求的服务端地址和端口
phone.connect(('127.0.0.1',8080)) #port:0-65535

发送消息
print('连接请求已经发送')
phone.send('hello'.encode('utf-8'))#发送的请求必须是bytes类型

接收消息
data=phone.recv(1024)
print(data)

最后关闭套接字
phone.close()

猜你喜欢

转载自www.cnblogs.com/shizhengquan/p/10167620.html
今日推荐