Python--网络编程学习笔记系列02

TCP和UDP的概述:

  udp通信模型类似于写信,不需要建立相关链接,只需要发送数据即可(现在几乎不用:不稳定,不安全)

  tcp通信模型类似于打电话,一定要建立相关链接才能发送数据(可靠传输机制:超时重传,错误校检,流量控制,阻塞管理等)

TCP:

  tcp通信模型步骤创建连接,数据传送,终止连接

  tcp通信模型只适用于一对一通信,不适合广播

  tcp客户端就是需要被服务的一方,服务器端就是提供服务的一方

tcp客户端

import scoket

def main()

  # 1.创建socket

  tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

  # 2.链接服务器

  server_ip = input("请输入要链接的服务器的ip:")

  server_port = int(input("请输入要链接的服务器的port:"))

  server_addr = (server_ip,server_port )

  tcp_socket.connect(server_addr)

  #tcp_socket.connect("183.23.23.23",8080)

  # 3.发送,接受数据

  send_data = input("请输入要发送的数据:")

  tcp_socket.send(send_data.encode("utf-8"))

  # 4.关闭套接字

  tcp_socket.close()

if  __name__  == "__main__":

main()

tcp服务器

import socket

def main()

  # 1.创建socket(买个手机)

  tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

  # 2.绑定本地信息ip,port(插入手机卡)

  tcp_server_socket.bind("",8080)

  # 3.让默认的套接字由主动变为被动 listen(手机设置为接听响铃)

  tcp_server_socket.listen(125)

  while True:

    print("等待一个新客户到来...")

    # 4.等待客户端链接 accept(等待电话到来)

    new_client_socket, client_addr = tcp_server_socket.accept()

    print("一个新客户已到来%s" % str(client_addr)")

    while True:

    # 5.接受客户端发过来的请求

    recv_data = new_client_socket.recv(1024)

    print("客户端发过来的请求是:%s" % recv_data.decode("utf-8"))

    # 如果recv解堵塞,1客户端发送数据,2客户端调用close

    if recv_data:     

        # 回送一部分数据给客户端

      new_client_socket.send("--ok--",encode("utf--8"))

    else:

      break    

    # 6.关闭套接字

    new_server_socket.close()

    print("已经服务完毕")

  tcp_server_socket.close()

if   __name__ == "__main__"

  main()

结束啦!

Python--网络编程学习笔记系列02 附:tcp服务端,tcp客户端的更多相关文章

  1. Python--网络编程学习笔记系列01 附实战:udp聊天器

    Python--网络编程学习系列笔记01 网络编程基本目标: 不同的电脑上的软件能够实现数据传输 网络编程基础知识: IP地址: 用来在网络中标记一台电脑  网络号+主机号(按网络号和主机号占位分类A ...

  2. python网络编程学习笔记(三):socket网络服务器(转载)

    1.TCP连接的建立方法 客户端在建立一个TCP连接时一般需要两步,而服务器的这个过程需要四步,具体见下面的比较. 步骤 TCP客户端 TCP服务器 第一步 建立socket对象  建立socket对 ...

  3. python网络编程学习笔记(10):webpy框架

    转载请注明:@小五义http://www.cnblogs.com/xiaowuyi django和webpy都是python的web开发框架.Django的主要目的是简便.快速的开发数据库驱动的网站. ...

  4. python网络爬虫学习笔记

    python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...

  5. 转 网络编程学习笔记一:Socket编程

    题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公司使用的一些控件的开发,浏览器兼容性搞死人:但主要是因为这段时间一直在看html5的东西,看到web socket时觉得很有 ...

  6. Linux Shell编程学习笔记——目录(附笔记资源下载)

    LinuxShell编程学习笔记目录附笔记资源下载 目录(?)[-] 写在前面 第一部分 Shell基础编程 第二部分 Linux Shell高级编程技巧 资源下载 写在前面 最近花了些时间学习She ...

  7. JAVA TCP网络编程学习笔记

    一.JAVA网络编程概述 网络应用程序,就是在已实现网络互联的不同计算机上运行的应用程序,这些程序之间可以相互交换数据.JAVA是优秀的网络编程语言,Java网络编程的类库位于java.net包中.J ...

  8. python网络编程学习《一》

    最近,刚实习完,很喜欢实验楼,但是自己的方向仍然不能确定,自己觉得可选择的空间很大,尽管已经是大四的人了,想到别人都在忙着买职业装,买高跟鞋面试,学习化妆什么的,看看自己,反而开始慢慢关注运动,食疗以 ...

  9. python网络爬虫学习笔记(一)Request库

    一.Requests库的基本说明 引入Rquests库的代码如下 import requests 库中支持REQUEST, GET, HEAD, POST, PUT, PATCH, DELETE共7个 ...

随机推荐

  1. Vue 下拉框值变动事件传多个参数

    在使用 Vue 进行开发时,下拉框值变动事件 @change 是很常用的. 其传参一般分为两种方式:默认传参和自定义传参. 默认传参 @change 默认会传选中项标识的参数,在传参处不用定义,在方法 ...

  2. MyBatis 03 缓存

    简介 什么是缓存 存在内存中的临时数据. 将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,转从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题 ...

  3. 小技巧---eclipse 全选lib jar包

    按住shift键,点击第一个jar包,然后点击最后一个jar包,就全选了所有jar包,然后添加build path 添加到类路径

  4. 分布式id生成器,雪花算法IdWorker

    /** * <p>名称:IdWorker.java</p> * <p>描述:分布式自增长ID</p> * <pre> * Twitter的 ...

  5. 十周周末总结 MySQL的介绍与使用

    python 十周周末总结 MySQL的介绍与使用 MySQL字符编码与配置文件 查看数据库的基本信息(用户,字符编码) /s windos下MySQL默认的配置文件 my_default.ini 修 ...

  6. HTTP协议,会话跟踪,保存作用域,servlet类跳转

    解决post的编码问题,防止中文乱码 request.setCharacterEncoding("utf-8"); HTTP协议: (1)由Request(请求)和Response ...

  7. 【突然想多了解一点】可以用 Task.Run() 将同步方法包装为异步方法吗?

    [突然想多了解一点]可以用 Task.Run() 将同步方法包装为异步方法吗? 本文翻译自<Should I expose asynchronous wrappers for synchrono ...

  8. .NET使用StackTrace获取方法调用者信息

    前言 在日常工作中,偶尔需要调查一些诡异的问题,而业务代码经过长时间的演化,很可能已经变得错综复杂,流程.分支众多,如果能在关键方法的日志里添加上调用者的信息,将对定位问题非常有帮助. 介绍 Stac ...

  9. Android开发2021.3.9日【模拟器路径】【外观字体】【简单快捷键】

    一. 1.模拟器存储路径 D:\Android\SDK\platforms(在本人的dell上) 2.使用软件 Android Studio4.2 3.注意事项 (1)修改JDK的路径为自己下载的JD ...

  10. 关于指针初始化为NULL的一些问题

    关于指针初始化问题,先看以下代码: #include <stdio.h>​typedef struct{   char data[128];   int top;​} Stack;​voi ...