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.listen()

连接地址

sk.connect(('127.0.0.1',8888))
sk.connect_ex(('127.0.0.1',8888))
#连接错误不报错,返回错误代码

/

接收请求

/

conn,addr = sk.accept()

发送消息

sk.send('hi!'.encode('utf-8'))
sk.sendall('hi!'.encode('utf-8'))
#发送数据过大,可以用sendall()

conn.send('hi'.encode('utf-8'))
sk.sendall('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()# 开启一个永久性的服务

  

posted @ 2019-09-18 15:06  ForLivetoLearn  阅读(201)  评论(0编辑  收藏  举报