点对点通信实验

点对点通信实验点对点通信实验语言:python1.socket基础参考:百度百科,socket,CSDN上也有很多讲解socket的。2.python中使用的相关函数官方文档1)socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None)AF_INET:ipv4协议SOCK_STREAM:面…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

点对点通信实验

语言: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命令杀死进程再运行。

程序如下:

服务端:

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

客户端:

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.net/159982.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 从华为清理34岁以上老员工想起的二三事

    从华为清理34岁以上老员工想起的二三事最近网上盛传华为清理34岁老员工的消息,不管“我司”辟谣与否,根据最近突然有多名同事跟我咨询招聘消息的情况来看,公司内部确实在进行一轮裁员工作,而且影响面比较大,一代华为人或多或少受到影响。最早看到相关消息是在朋友圈转发的一篇文章上,说到强制退休一名42岁和辞退一名39岁的老员工。从我十几年前刚进华为的时候就一直有45岁内部退休的传言,退休后能够保留股票,但是因为当时华为平均年龄很小,周围几乎

    2022年7月17日
    37
  • sklearn KFold()

    最近实践过程中遇到需要KFold()记录一下,以便日后查阅KFold()在sklearn中属于model_slection模块fromsklearn.model_selectionimportKFoldKFold(n_splits=’warn’,shuffle=False,random_state=None)参数:n_splits表示划分为几块(至少是2)shuffle…

    2022年4月5日
    89
  • 【系统架构设计师】第一章:操作系统(1.2.1)进程的三态模型与五态模型

    本篇帖子继续上篇。有兴趣可以点击链接进行查看以前写过的文章。【系统架构设计师】第一章:操作系统(1.1.1—1.1.2)参考教材:《系统架构设计师考试全程指导(第二版)》《系统架构设计师教程》1.2处理器管理在单用户多任务的操作系统中,或者多用户多任务的操作系统中,系统同时运行多个程序,这些程序的并行运行势必形成对系统资源的竞争使用。因此,操作系统必须能够处理和管理这种并行运行的程序,使之对资源的使用按照良性的顺序进行。1.2.1进程的状态首先我们要搞清楚三个东西的区别:程序,进程,.

    2022年4月13日
    43
  • Win7 安装.net framework 4.0 失败,错误HRESULT 0xc8000222解决办法

    Win7 安装.net framework 4.0 失败,错误HRESULT 0xc8000222解决办法

    2021年8月14日
    74
  • Qt5.7 + VS2015 环境搭建「建议收藏」

    Qt5.7 + VS2015 环境搭建「建议收藏」简述之前介绍过Qt5.x的环境搭建,5.7开始支持VS2015,为了使用新的开发环境(典型的强迫症),不得不再次进行Qt5.7+VS2015的环境搭建。除了之前介绍的搭建细节之外,其实中间有很多需要注意的部分。下面,主要分享搭建过程以及其中需要注意的一些事项。简述安装VS2015安装Qt57配置QtCreator配置编译器配置调试器HelloWorldVS20

    2022年5月16日
    59
  • mac全选文字的快捷键_Mac文本快捷键你知道多少?

    mac全选文字的快捷键_Mac文本快捷键你知道多少?我们在MAC电脑上码字的时候,经常会遇到需要对某段文字进行修改或者操作的情况,相信很多人的做法是用鼠标去移动光标快速定位,如果字数篇幅比较小也是可以的,但是如果遇到大篇幅的文章,一点点的用鼠标去找会非常麻烦,今天我就教大家几个MAC文本快捷键,让你在最短的时间内把光标移动到你想要的位置,提高在电脑上码字的效率。image1、全文&段落定位目标位置比较远的时候,需要对光标远程定位,下面的组合…

    2022年5月26日
    55

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号