python-socket编程

python-socket编程,第1张

一、基本原理

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

参数类型:

  • family: 套接字家族,可以使AF_UNIX或者AF_INET
  • type: 套接字类型,根据是面向连接的还是非连接分为SOCK_STREAMSOCK_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 connect-----")

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/873273.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存