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. BAT网络运维常见面试题目总结

    BAT常见面试题目总结 Author:Danbo 2015-7-11 TCP/IP详解鸟哥Linux的书网络安全ping的原理make的过程文件有哪些类型各种Linux发行版的区别.有关suid的作用 ...

  2. [NOIP2011提高组day2]-2-聪明的质监员

    2.聪明的质监员(qc.cpp/c/pas) [问题描述] 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到 n 逐一编号,每个矿石都有自己的重量 wi 以及价 ...

  3. LightOJ1138 —— 阶乘末尾0、质因子分解

    题目链接:https://vjudge.net/problem/LightOJ-1138 1138 - Trailing Zeroes (III)    PDF (English) Statistic ...

  4. H3C-交换机密码恢复

    交换机密码恢复: 一. 拔掉电源再插上重新启动交换机,在超级终端中可以看到交换机启动画面,当出现提示按CTRL+B时,此时按住CTRL+B,我们会看到有9个选项: 1. download applic ...

  5. 初学Java(一)

    基本语法: 编写Java程序时,应注意以下几点: 1.大小写敏感:java是大小写敏感的,这就意味着标识符Hello与hello是不同的. 2.类名:对于所有的类来说,类名的首字母应该大写.如果类名由 ...

  6. Volley Cache机制分析

    1.http缓存机制 要弄明白volley缓存机制,那么肯定是和浏览器的缓存机制有关了,简单来说volley整套框架要做的事都是模拟浏览器来进行一次次的http交互 1.1.概述 http缓存的是指当 ...

  7. sql语句之连表操作

    内连接 select * from employee inner join department on employee.dep_id = department.id 左连接 在内连接的基础上保留左表 ...

  8. 技术胖Flutter第四季-21导航的参数传递和接受-2

    21导航的参数传递和接受-2 视频地址 https://www.bilibili.com/video/av35800108/?p=22 博客地址:https://jspang.com/post/flu ...

  9. HDU - 3410 Passing the Message 单调递减栈

    Passing the Message What a sunny day! Let’s go picnic and have barbecue! Today, all kids in “Sun Flo ...

  10. Entity FrameWork 5 增删改查 & 直接调用sql语句 ?

    #region 1.0 新增 -void Add() /// <summary> /// 1.0 新增 /// </summary> static void Add() { / ...