SOCKET

TCP协议:

有请求 有响应 称之为 tcp协议

是面向连接的协议 就是在收发数据之前 必须先要建立一个可靠的链接 三次握手

如:网站

UDP协议:

是一个非链接的协议 传输之前不需要键连接

如:qq,飞秋

socket概念:

Socket又称套接字 向网络发出请求 或者应答网络请求 可以实现在一台计算机上不同的进程进行通信

二、socket使用

import socket
socket.socket(family,type)

参数:

  • family: AF_UNIX或者是AF_INET

    AF_INET 使用的IPV4

    AF_UNIX 不走网络层的 也不需要进行数据的解密 使用于传输大量数据

  • type:

    SOCKET_STREAM (TCP链接)

    SOCKET_DGRAM (UDP链接)

三、创建udp的客户端和服务端

(1) 服务端

实例

import socket
udpServer = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #第一个为ipv4  第二个选择udp
udpServer.bind(("127.0.0.1",8868)) #绑定IP 和端口号 让别人通过这个地址和端口号请求到当前的服务
​
data,addr = udpServer.recvfrom(1024) #接收发送过来的数据 最大1kb 返回数据和对方的地址  
print("客户端发送的消息的内容为{} 地址为{}".format(data,addr))
​
#在运行以后会阻塞 等待对方的请求
 

(2) 客户端

实例

import socket
udpClient = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
​
while True:
    data = input('请输入内容')
    udpClient.sendto(data.encode('utf-8'),("127.0.0.1",8868))
 

四、TCP服务端和客户端

(1) 服务端

实例

import socket
#TCP
tcpServer = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcpServer.bind(("127.0.0.1",8878))
tcpServer.listen(5) #超过5人链接服务端  后面的人排队 阻塞
​
clientSock,addr = tcpServer.accept() #当前等待链接 阻塞模式
while True:
    data = clientSock.recv(1024) #接收客户端的数据
    print('接收客户端的信息为{}'.format(data.decode('utf-8')))
    serverData = input("请输入回复信息")
    clientSock.send(serverData.encode('utf-8')) #回复客户端的数据
 

(2) 客户端

import socket
​
tcpClient = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcpClient.connect(("127.0.0.1",8878)) #链接tcp服务端
while True:
    data = input("请输入写给服务端的内容")
    tcpClient.send(data.encode('utf-8')) #客户端给服务端发送数据
    serverData = tcpClient.recv(1024) #接收服务端传递过来的数据
    print("对方回复的消息为:",serverData.decode('utf-8')) #显示数据

五、通过socket请求网址

实例

import socket
#建立TCP协议
# print(socket.gethostbyname('www.baidu.com')) #通过域名获取 IP地址
tcpClient = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
​
#建立链接
tcpClient.connect(('www.id97.com',80))
tcpClient.send(b'GET / HTTP/1.1\r\nHost: www.id97.com\r\nConnection: close\r\n\r\n')
dataList = []
while True:
    data = tcpClient.recv(1024)
    if not data:
        break
    dataList.append(data)
​
f = open('id97com.html','wb')
f.writelines(dataList)
f.close()
 

python 基础(十五) socket编程的更多相关文章

  1. python基础十五之递归函数

    递归函数,在函数中调用自身函数,就会形成一个递归函数.例如: def recursion(n): n += 1 print(n) recursion(n) 由于递归函数的结构,在函数调用时,它会一直调 ...

  2. Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块

    Python第十五天  datetime模块 time模块   thread模块  threading模块  Queue队列模块  multiprocessing模块  paramiko模块  fab ...

  3. 孤荷凌寒自学python第二十五天初识python的time模块

    孤荷凌寒自学python第二十五天python的time模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 通过对time模块添加引用,就可以使用python的time模块来进行相关的时间操 ...

  4. 孤荷凌寒自学python第十五天python循环控制语句

    孤荷凌寒自学python第十五天python循环控制语句 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) python中只有两种循环控制语句 一.while循环 while 条件判断式 1: ...

  5. 《网络安全编程基础》之Socket编程

    <网络安全编程基础>之Socket编程 我的代码 server.c // server.cpp : Defines the entry point for the console appl ...

  6. Bootstrap<基础十五> 输入框组

    Bootstrap 支持的另一个特性,输入框组.输入框组扩展自 表单控件.使用输入框组,可以很容易地向基于文本的输入框添加作为前缀和后缀的文本或按钮. 通过向输入域添加前缀和后缀的内容,您可以向用户输 ...

  7. Python之路,Day8 - Socket编程进阶

    Python之路,Day8 - Socket编程进阶   本节内容: Socket语法及相关 SocketServer实现多并发 Socket语法及相关 socket概念 socket本质上就是在2台 ...

  8. 初学 Python(十五)——装饰器

    初学 Python(十五)--装饰器 初学 Python,主要整理一些学习到的知识点,这次是生成器. #-*- coding:utf-8 -*- import functools def curren ...

  9. 实验十五 GUI编程练习与应用程序部署

    实验十五  GUI编程练习与应用程序部署 实验时间 2018-12-6 一:理论部分 1.Java 程序的打包:编译完成后,程序员将.class 文件压缩打包为 .jar 文件后,GUI 界面序就可以 ...

随机推荐

  1. 关于web页自动适配屏幕大小

    一.先了解下html5的viewport使用 随着高端手机(Andriod,Iphone,Ipod,WinPhone等)的盛行,移动互联应用开发也越来越受到人们的重视,用html5开发移动应用是最好的 ...

  2. MongoDB复制集高可用选举机制(三)

    复制集高可用选举机制 在上一章介绍了MongoDB的架构,复制集的架构直接影响着故障切换时的结果.为了能够有效的故障切换,请确保至少有一个节点能够顺利升职为主节点.保证在拥有核心业务系统的数据中心中拥 ...

  3. bzoj 4503 两个串 —— FFT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4503 推式子即可: 不知怎的调了那么久,应该是很清晰的. 代码如下: #include< ...

  4. SSIS 增量更新

    本文转自 http://sqlblog.com/blogs/andy_leonard/archive/2007/07/09/ssis-design-pattern-incremental-loads. ...

  5. PowerDesigner:导出SQL脚本以及问题解决

    在PowerDesigner中点击DataBase  -----------> Generate Datebase  -----(可以点击Preview预览sql语句)------->设置 ...

  6. <正则吃饺子>:关于使用powerDesign连接oracle数据库,导出数据表结构(ER图吧)

    最近做的项目中,没有完整的数据库表结构图(ER图),自己就根据服务器上oracle数据库和powerdesign整理一份,但是存在两个问题:1.没有把数据库表的相关备注弄下来:2.数据库表中的主外键关 ...

  7. sqlServer:convert()函数

    在oracle中对于时间格式的转换用到的比较多,相对也比较了解,现在换了新的项目组,使用sqlserver数据库,需要对这个数据库的一些常用函数进行重新学习和熟悉,现在根据w3c及网上博文对conve ...

  8. windows下mysql5.1忘记root密码解决方法[win7]

    步骤如下:1.停止mysql服务(以管理员身份,在cmd命令行下运行) net stop mysql2.使用 mysqld –skip-grant-tables 命令启动mysql数据库 D:\> ...

  9. Resistance

    题意: 给出一个由n个节点和m个二元电阻元件组成的电路,求问节点1到节点n的等效电阻. 解法: 应用电子电路分析中的基尔霍夫定律,对于每一个点有流量平衡,得 对于点$x$有 $$I_{出} + \su ...

  10. 了解Hadoop

    Apache Hadoop 官网 Hadoop源码分析 参考1   参考2 Hadoop 是一个由 Apache 基金会所开发的分布式系统基础架构. Hadoop 的框架最核心的设计就是:HDFS(H ...