点对点通信实验

点对点通信实验点对点通信实验语言: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)
上一篇 2022年7月25日 下午7:36
下一篇 2022年7月25日 下午7:46


相关推荐

  • CentOS8 安装apache+mysql+php

    CentOS8 安装apache+mysql+phpCentOS8 安装 apache mysql php 安装 apache1 通过 yum 命令安装 apache 安装 mysql 我们对 Markdown 编辑器进行了一些功能拓展与语法支持 除了标准的 Markdown 编辑器功能 我们增加了如下几点新功能 帮助你用它写博客 全新的界面设计 将会带来全新的写作体验 在创作中心设置你喜爱的代码高亮样式 Markdown 将代码片显示选择的高亮样式进行展示 增加了图片拖拽功能 你可以将本地的图片直接拖拽到编辑区域直接展示 全新的 KaTeX 数学公式语法

    2026年3月18日
    2
  • 单射、满射和双射(一 一映射)[通俗易懂]

    单射、满射和双射(一 一映射)[通俗易懂]设映射f:A→B,如果A中不同的元素的像都不相同,则f称为单射;如果A中元素的像充满了像集B,即B中的元素都有原像,则f称为满射;如果f既是单射,又是满射,则f称为双射,双射也叫一一映射。…

    2022年5月3日
    252
  • 你的账户被停用,请向系统管理员咨询_win10退出管理员账户

    你的账户被停用,请向系统管理员咨询_win10退出管理员账户当你的电脑误操作了以下步骤,或者被篡改了设置了这里那恭喜你,重启后就登不上Administrator账户了首先看一下网上的两种无效方式无效方式一:带命令符的安全模式一般两种方式进入安全模式:方式一:F8进入方式二:按住shift重启cmd中输入netuseradministrator/active:yes亲测无效,依然登录不进去无效方式二:PE进入设置用户和组…

    2025年7月18日
    5
  • java获取文件名乱码_java导出文件名中文乱码

    java获取文件名乱码_java导出文件名中文乱码Java读linux系统文件文件名乱码的解决办法1,问题描述web应用想通过Java读取linux系统文件显示到web页面上,结果中文文件名出现乱码?问题场景描述:当用户通过浏览器访问tomcat服务器,请求查看某一路径下文件列表信息,tomcat的web应用调用getFilesByPath(Stringpath)方法读取文件列表信息响应请求,页面中文文件名出现乱码。推荐教程:《java学习》代…

    2022年10月20日
    4
  • 重定向和转发的区别及应用[通俗易懂]

    重定向和转发的区别及应用[通俗易懂]重定向重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL,而当使用转发时,该URL会保持不变。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。重定向的速度比转发慢,因为浏览器还得发出一个新的请求。同时,由于重

    2025年10月3日
    6
  • C++和Java哪个好?为什么都选择Java?

    C++和Java哪个好?为什么都选择Java?Java 与 C 都拥有相当长的历史 且语法相当类似 并被众多业界巨头所采用 C 和 Java 哪个好 事实上 Java 本来就是从 C 衍生出来的 但是为什么大家都选择 Java 本篇文章来给大家分析一下 个人观点 勿撕 C 和 Java 哪个好 语法 两种语言中的循环结构 类 变量定义以及条件运算符非常相近 意味着开发者能够轻松在不同项目中分别使用这两种语言 而不会遇到太多障碍 入口点 在程序启动时 编译器或者解释器会查找开始执行的对应位置 Java 与 C 都以 main 作为入口点 面向对象 面向对

    2026年3月17日
    4

发表回复

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

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