python socket模块
1.socket参数
socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None)
familt:
AF_INET:网络文件套接字,默认
AF_UNIX:本地文件套接字
type:
SOCK_STREAM:TCP协议,默认
SOCK_DGRAM:UDP协议
proto:通常为0
fileno:通常为None
2.TCPsocket常用方法
|
TCP socket |
client |
server |
|
实例化 |
sk = socket.socket() |
sk = socket.socket() |
|
绑定地址 |
/ |
sk.bind(('127.0.0.1',8888)) |
|
连接地址 |
sk.connect(('127.0.0.1',8888)) |
/ |
|
接收请求 |
/ |
conn,addr = sk.accept() |
|
发送消息 |
sk.send('hi!'.encode('utf-8')) |
conn.send('hi'.encode('utf-8')) |
|
接收消息 |
ret = sk.recv(1024) |
ret = conn.recv(1024) |
|
关闭client |
/ |
conn.close() |
|
关闭server |
sk.close() |
sk.close() |
3.UDPsocket常用方法
|
UDP socket |
client |
server |
|
实例化 |
sk = socket.socket(type=socket.SOCK_DGRAM) |
sk = socket.socket(type=socket.SOCK_DGRAM) |
|
绑定地址 |
/ |
sk.bind(('127.0.0.1',8888)) |
|
接收消息 |
message,ip = sk.recvfrom(1024) |
message,ip = sk.recvfrom(1024) |
|
发送消息 |
sk.sendto(str,ip) |
sk.sendto(str,ip) |
|
断开连接 |
sk.close() |
sk.close() |
2.基于TCP协议的服务端和客户端
#服务端
import socket
sk = socket.socket()
sk.bind(('127.0.0.1',8888)) #把地址绑定到套接字,IP为字符串,端口为数字
sk.listen() #监听此连接
conn,addr = sk.accept() #接受客户端链接
ret = conn.recv(1024) #接收客户端信息,指定接收的字节
print(ret) #打印客户端发来的信息
conn.send('hi'.encode('utf-8')) #向客户端发送信息,编码为字节形式
conn.close() #关闭客户端套接字
sk.close() #关闭服务器套接字(可选)
#客户端
import socket
sk = socket.socket() # 创建客户套接字
sk.connect(('127.0.0.1',8898)) # 尝试连接服务器
sk.send('hello!'.encode('utf-8')) #发送消息,以字节形式发送
ret = sk.recv(1024) # 接收回信
print(ret)
sk.close()
3.基于UDPsocket的服务端和客户端
#服务端
import socket
sk = socket.socket(type=socket.SOCK_DGRAM) #指定UDP协议
sk.bind(('127.0.0.1',8888)) #绑定端口地址
msg,ip = sk.recvfrom(1024) #接收请求
str = 'hahaha'.encode('utf-8')
sk.sendto(str,ip) #发送给客户端
sk.close() #关闭连接
#客户端
import socket
sk = socket.socket(type=socket.SOCK_DGRAM) #指定UDP协议
ip = ('127.0.0.1',8888)
str = 'hi'.encode('utf-8')
sk.sendto(str,ip) #发送消息
msg,ip = sk.recvfrom(1024) #接收消息
print(msg,ip)
sk.close() #关闭连接
4.多连接TCPsocket服务端-socketserver
import socketserver
class MySocket(socketserver.BaseRequestHandler):
def handle(self):# 这个方法的名字是固定的,必须是这个名字
# 收发的逻辑代码
msg = self.request.recv(1024).decode('utf-8')
self.request.send(msg.upper().encode('utf-8'))
server = socketserver.TCPServer(('127.0.0.1',8080),MySocket)# 固定的
server.serve_forever()# 开启一个永久性的服务

浙公网安备 33010602011771号