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. CentOS 6.9 安装 ftp 服务器

    昨天为了方便上传写好的博客 .md 文件到服务器上,就在服务器搭建了一个 ftp 服务端用来上传写好的博客.很久之前我也使用虚拟机搭建过 ftp 服务器,但是时间久了,很多都忘记了.于是乎又一顿 Go ...

  2. 升级python到最新2.7.13

    python2.7是2.X的最后一个版本,同时也加入了一部分3.X的新特性.并且具有更好的性能,修改多个bug.所以决定升级到最新的2.7版,我的目前的版本是2.6.6 查看当前python版本 # ...

  3. 渗透模型 Percolation Models(一个物理模型的广泛应用)

    转自:http://mooc.guokr.com/note/15357/ http://mooc.guokr.com/user/0298406005/note/ 模型思想: 有水流下来,是否会渗入地面 ...

  4. wpf图片定点缩放

    去年犯小人,万事不顺,4月刚换工作,开始新工作 遇到一个小问题,需要读取图片,然后对图片进行定点缩放,很简答的逻辑,很简单的代码,但是,这尼玛我被wpf给坑了,这一坑就是三天 好了,很简单的一个UI ...

  5. Mac开发快速入门

    初次接触mac开发,发现国内相关资料少得可怜,于是写下这篇文章,作为学习记录.Mac应用开发也是使用Objective-C进行开发的,所以从iOS转Mac并不困难,很多东西都一样. 本文以一个登录界面 ...

  6. 【转】看C++文档的小知识

    转载:http://www.ggv.com.cn/forum/clib/ctype/isspace.html 函数isspace 原型:extern int isspace(int c);    用法 ...

  7. asterisk用 freetds记录 cdr 到mssql

    Compile, configure, and install the latest FreeTDS package: [pre]           tar -zxvf freetds-0.62.4 ...

  8. C++之pair与make_pair

    std::pair主要的作用是将两个数据组合成一个数据,两个数据可以是同一类型或者不同类型. 例如std::pair<int,float> 或者 std::pair<double,d ...

  9. 注销ie中的ActiveX插件

    最新在C#下开发ActiveX控件,遇到一个问题,就是在调试的时候,ActiveX就已经注册在了调试目录下,这样即使安装这个插件,也无法注册到ActiveX的安装目录下.为了解决这个问题,需要注销下调 ...

  10. 算法导论17:摊还分析学习笔记(KMP复杂度证明)

    在摊还分析中,通过求数据结构的一系列的操作的平均时间,来评价操作的代价.这样,即使这些操作中的某个单一操作的代价很高,也可以证明平均代价很低.摊还分析不涉及概率,它可以保证最坏情况下每个操作的平均性能 ...