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

socketio python(python socket通讯客户端代码)

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

socketio python(python socket通讯客户端代码)

python socket通讯定义如下

socket.socket([family[, type[, proto]]])
#family: 套接字家族,可以是 AF_UNIX 或者 AF_INET,
#AF_UNIX:只能够用于单一的Unix系统进程间通信,AF_INET:服务器之间网络通信。
#type: 套接字类型,SOCK_STREAM流式socket , for TCP  或 SOCK_DGRAM数据报式socket , for UDP。
#protocol: 一般不填默认为 0。

服务端代码

import socket               # 导入 socket 模块
s = socket.socket()         # 创建 socket 对象
s.bind(('127.0.0.1', 5001))        # 绑定端口
s.listen(5)                 # 等待客户端连接
while True:
    c,addr = s.accept()     # 建立客户端连接
    c.send('欢迎点赞!'.encode('utf-8'))
    c.close()                # 关闭连接

客户端代码

import socket               # 导入 socket 模块
s = socket.socket()         # 创建 socket 对象
s.connect(('127.0.0.1', 5001))
print(s.recv(1024).decode())
s.close()

注意上面的代码中使用了encode和decode函数,socket 套接字传输使用的必须是字节串所以在 发送数据时候做了一步字符串编码str.encode(‘utf-8’) ,编码格式选的 utf-8,这样就把字符串变成了字节串。这是因为Bytes才是计算机里真正的数据类型,也是网络数据传输中唯一的数据格式,什么Json,Xml这些格式的字符串最后想传输也都得转成Bytes的数据类型才能通过socket进行传输 。
上面的代码只完成了一次发送和接受就关闭了通讯。实际使用过程中我们可能更多的会发送->接受->发送->接受循环下去
服务端代码

import socket
import datetime
import time
import sys

bufsize = 1024
host = '127.0.0.1'
port = 5000
address = (host, port)

server_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_sock.bind(address)
server_sock.listen(1)

while True:
    print('waiting for connection...')
    clientsock, addr = server_sock.accept()
    print('received from :', addr)

    while True:
        data = clientsock.recv(bufsize)
        print(' data received---->%sn%s' % (datetime.datetime.now(), data.decode()))
        data = input("send data----->")
        time.sleep(4)
        clientsock.send(data.encode('utf-8'))
    clientsock.close()

server_sock.close()

客户端代码

from socket import *
import datetime

bufsize = 1024
host = '127.0.0.1'
port = 5000
addr = (host, port)

client_sock = socket(AF_INET, SOCK_STREAM)
client_sock.connect(addr)

while True:
    data = input("send data---->")
    if not data:
        break
    else:
        client_sock.send(data.encode('utf-8'))
        data = client_sock.recv(bufsize)
        print('data received---->%sn%s' % (datetime.datetime.now(), data.decode()))

client_sock.close()

注意:Python3.x 中 input() 函数接受一个标准输入数据,返回为 string 类型

如果你某一次强制结束程序,再运行的时候报错OSError: [Errno 98] Address already in use

sudo lsof -i:XXXX
#python3.8 12013  mby    3u  IPv4 171714      0t0  TCP localhost:5000 (LISTEN)
#kill 12013     12013是对应的PID   
#先关client,再关server,可以避免这种问题的发生。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/772681.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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