前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >点对点通信实验

点对点通信实验

作者头像
全栈程序员站长
发布2022-09-16 21:37:18
5800
发布2022-09-16 21:37:18
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

点对点通信实验

语言:python

1.socket基础

参考:百度百科,socket,CSDN上也有很多讲解socket的。

2.python中使用的相关函数

官方文档

1)socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)

AF_INET:ipv4协议

SOCK_STREAM:面向连接的稳定数据传输,即TCP

2)socket.bind(address)

s.bind(address)将套接字绑定到地址。address地址的格式取决于地址族。在AF_INET下,以元组(host,port)的形式表示地址。

3)socket.listen(backlog)

开始监听传入连接。backlog指定在拒绝连接之前,可以挂起的最大连接数量。backlog等于5,表示内核已经接到了连接请求,但服务器还没有调用accept进行处理的连接个数最大为5,这个值不能无限大,因为要在内核中维护连接队列

4)socket.setblocking(bool)

是否阻塞(默认True),如果设置False,那么accept和recv时一旦无数据,则报错。

5)socket.accept()

接受连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址。接收TCP 客户的连接(阻塞式)等待连接的到来

6)socket.connect(address)

连接到address处的套接字。一般,address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。

7)socket.close()

关闭套接字

8)socket.recv(bufsize[,flag])

接受套接字的数据。数据以字符串形式返回,bufsize指定最多可以接收的数量。flag提供有关消息的其他信息,通常可以忽略。

9)socket.send(string[,flag])

将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。即:可能未将指定内容全部发送。

3.实验

在同一台虚拟机上运行两个docker容器。ip分别为172.17.0.2和172.17.0.3

一个做服务端,一个做客户端

在服务端运行server.py,客户端运行client.py,如下;

注意,在终止程序时使用Ctrl+C不要用Ctrl+Z,否则程序没有完全关掉,下次运行这个程序时会报错。若用Ctrl+Z关闭程序时,这时可以使用ps aus查看进程,使用kill命令杀死进程再运行。

程序如下:

服务端:

代码语言:javascript
复制
import socket

HOST='172.17.0.2'
PORT=5678

def main():
    service=socket.socket()
    service.bind((HOST,PORT))
    service.listen(5)
    print("server is listening...")

    while True:
        connection,addr=service.accept()
        print(addr[0]+" is connected.")
        while True:
            message=connection.recv(1024).decode('utf-8')
            print(message)
            if message=="#exit#":
                print(addr[0]+" exit.")
                break;
        connection.close()

if __name__ == '__main__':
    main()

客户端:

代码语言:javascript
复制
import socket

HOST='172.17.0.2'
PORT=5678

def main():
    client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    if client.connect((HOST,PORT))!=socket.error:
        print("connect successfully!")
        try:
            while 1:
                message=input("please input the message you want to send:")
                infor=message.encode('utf-8')
                client.send(infor)
        except KeyboardInterrupt:
            message='#exit#'
            infor=message.encode('utf-8')
            client.send(infor)
            print("exit.")
    client.close()

if __name__ == '__main__':
    main()

注:以上所有操作均在作者在网上搜集资料后,在个人电脑上实验成功,若读者实验时失败,可能由一些未知因素导致,可与作者联系。编写的教程可能由于疏忽出错,请与作者联系。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/159982.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 点对点通信实验
    • 1.socket基础
      • 2.python中使用的相关函数
        • 3.实验
        相关产品与服务
        云服务器
        云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档