栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python-socket编程

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python-socket编程

一、基本原理

1、创建socket对象
s = socket.socket([family[, type[, proto]]])

参数类型:

  • family: 套接字家族,可以使AF_UNIX或者AF_INET。
  • type: 套接字类型,根据是面向连接的还是非连接分为SOCK_STREAM或SOCK_DGRAM,也就是TCP和UDP的区别。
  • protocol: 一般不填默认为0。
2、socket对象操作方法
  • 服务端
s.bind(host, port)   #绑定主机和端口号   连接远程vps,ip地址为vps的ip,通过ifconfig查看
s.listen([backlog])			#启动一个服务,并进行监听, backlog参数可选,指定系统最大的连接数,超过这个数,程序将拒绝连接
s.accept()   #接受一个连接,返回值是一个元组(conn, address), conn是一个新的socket对象,address是连接这个socket进程绑定的地址
  • 客户端
ip_port = (ip, port)   #要连接的主机的ip地址和端口号,注意数据是元组
s.connect(ip_port)     #connect函数实现连接到  远程套接字
s.connect_ex()         #相比于connect函数,这个函数不会抛出异常,而是返回一个错误码(errno)
  • 通用的方法
#通过socket传输的数据都是二进制(bytes)类型,也就是说需要 encode()  decode()操作

s.recv(bufsize)    	#接受数据函数,bufsize指定一次接受的数据大小

#下面两个方法要求已经建立socket连接
s.send()    		#发送数据(经过encode), 返回值是发送数据的大小
s.sendall()       	#成功返回None, 发送失败抛出一个异常  

s.sendto(bytes, address)  #address指定目的套接字
二、使用socket实例 1、服务端与客户端进行通信

实现功能:本机与远程主机进行的通信

注意:server端绑定的是vps主机的ip地址,client端连接的是vps的公网地址

server.py 服务端

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#s.create_server(('', 8888))  #create_server创建的是一个socket对象

ip_port =(('ip', 7777))   #这里的ip地址为vps的地址,而不是公网地址

s.bind(ip_port)

s.listen()

print("-----start socket server, waiting for connet-----")

conn, address = s.accept()

while True:
    client_data = conn.recv(1024).decode()
    if client_data == "exit":
        exit("connection close")
    print(f"recv from {address} data is :{client_data}")
    conn.sendall("the server has received message".encode())

conn.close()

client.py 客户端

import socket

s = socket.socket()

s.connect(("ip", 7777))  #这个地方的地址需要是公网ip,这样才能找到这台主机

while True:

    inp = input("plz input something you need to translate:").strip()

    s.sendall(inp.encode())

    if inp == "exit":
        print("close connection")
        break

    response = s.recv(1024).decode()
    print(response)

s.close()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/863806.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号