python tcp协议_python 网络编程 -- Tcp协议

Socket是网络编程的一个抽象概念。通常我们用一个Socket表示“打开了一个网络链接”,而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可。

客户端

大多数连接都是可靠的TCP连接。创建TCP连接时,主动发起连接的叫客户端,被动响应连接的叫服务器。

举个例子,当我们在浏览器中访问新浪时,我们自己的计算机就是客户端,浏览器会主动向新浪的服务器发起连接。如果一切顺利,新浪的服务器接受了我们的连接,一个TCP连接就建立起来的,后面的通信就是发送网页内容了。

所以,我们要创建一个基于TCP连接的Socket,可以这样做:

#倒入socket库

import socket

#创建一个socket

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

#建立连接

s.connect(('www.sina.com.cn',80))

#发送数据

#TCP连接创建的是双向通道,双方都可以同时给对方发数据。但是谁先发谁后发,怎么协调,要根据具体的协议来决定。

#例如,HTTP协议规定客户端必须先发请求给服务器,服务器收到后才发数据给客户端。

s.send(b'GET / HTTP/1.1\r\nHost: www.sina.com.cn\r\nConnection: close\r\n\r\n')

#接收数据

buffer = []

while True:

#每次最多接收1k字节

d = s.recv(1024)

if d:

buffer.append(d)

else:

break

data = b''.join(buffer)

# 关闭连接

s.close()

header, html = data.split(b'\r\n\r\n', 1)

print header.decode('utf-8')

#把接收的数据写入文件:

with open('sina.html', 'wb') as f :

f.write(html)

服务器:

#服务器端#服务器端需要绑定一个端口来监听来自其它客户端端连接。如果某个客户端连接过来了,服务器就与该客户端建立Socket连接,随后的信任就靠这个Socket连接了#由于服务器会有大量来自客户端的连接,所以,服务器要能够区分一个Socket连接是和哪个客户端绑定的。一个Socket依赖4项:服务器地址、服务器端口、客户端地址、客户端端口来唯一确定一个Socket。#但是服务器还需要同时响应多个客户端的请求,所以,每个连接都需要一个新的进程或者新的线程来处理,否则,服务器一次就只能服务一个客户端了

importsocketimporttime

s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)deftcplink(sock, addr):print('Accept new connection from %s:%s...' %addr)

sock.send(b'Welcome!')whileTrue:

data= sock.recv(1024)

time.sleep(1)if not data or data.decode('utf-8') == 'exit':breaksock.send(('Hello, %s!' % data.decode('utf-8')).encode('utf-8'))

sock.close()print('Connection from %s:%s closed.' %addr)#绑定监听的地址和端口#服务器可能有多块网卡,可以绑定到某一块网卡的IP地址上,也可以用0.0.0.0绑定到所有的网络地址,还可以用127.0.0.1绑定到本机地址。#监听端口:

s.bind(('127.0.0.1', 9999))#开始监听, 传入的参数🈯️等待连接的最大数量

s.listen(5)print 'Waiting for connection....'

#服务器程序通过一个永久循环来接受来自客户端的连接,accept()会等待并返回一个客户端的连接:

whileTrue:#接收一个新连接:

sock, addr =s.accept()#创建新线程来处理TCP连接:

importthreading

t= threading.Thread(target=tcplink, args=(sock, addr))

t.start()#每个连接都必须创建新线程(或进程)来处理,否则,单线程在处理连接的过程中,无法接受其它客户端的连接:

客户端

#-*- coding:utf-8 -*-

importsocket

s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)#建立连接:

s.connect(('127.0.0.1', 9999))#接收欢迎消息:

print(s.recv(1024).decode('utf-8'))for data in [b'Michael', b'Tracy', b'Sarah']:#发送数据:

s.send(data)print s.recv(1024).decode('utf-8')

s.send(b'exit')

s.close()

分别运行2,3代码库,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245972.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pathon和python_Python文件和目录操作详解

一、文件的打开和创建1、打开open(file,mode):>>>fo open(test.txt, r)>>>fo.read()hello\n>>>fo.close()file(file,mode):>>>f file(test.txt, r)>>>f.read()hello\n>>>f.close()mode可取值:2、创建用w/w…

java 字节输入流_JavaIO流(一)-字节输入流与字符输入流

IO流详解一、输入流字节输入流FileInputSteam1、构造方法:public FileInputStream(File file) {}public FileInputStream(FileDescriptor fdObj){}public FileInputStream(String name){}2、read方法:// 每次读取一个字节public int read(){}// 读取b.le…

python散点矩阵图_用python-pandas作图矩阵

本文为一篇翻译文章,来自于Visualize Machine Learning Data in Python With Pandas - Machine Learning Mastery**,原文标题是Visualize Machine Learning Data in Python With Pandas(在Python里使用pandas对机器学习的数据进行可视化分析)&#xff0c…

Java哪些是线程安全的_Java集合中那些类是线程安全的

线程安全类在集合框架中,有些类是线程安全的,这些都是jdk1.1中的出现的。在jdk1.2之后,就出现许许多多非线程安全的类。 下面是这些线程安全的同步的类:vector:就比arraylist多了个同步化机制(线程安全),因…

python求斐波那契数列第n个数及前n项和_使用python求斐波那契数列中第n个数的值示例代码...

使用python求斐波那契数列中第n个数的值示例代码,数列,递归,方法,兔子,个数使用python求斐波那契数列中第n个数的值示例代码易采站长站,站长之家为您整理了使用python求斐波那契数列中第n个数的值示例代码的相关内容。斐波那契数列(Fibonacci sequence),…

java org.apache.http_org.apache.http jar包下载-org.apache.http.jar包下载 --pc6下载站

org.apache.http.jar包是一款十分常用的jar包如果没有org.apache.http.jar包Apache与http的链接将会出现错误等现象马上下载org.apache.http.jar包。。相关软件软件大小版本说明下载地址org.apache.http.jar包是一款十分常用的jar包,如果没有org.apache.http.jar包,Apache与htt…

网络连接异常、网站服务器失去响应_网站常见故障解决办法

网站在运行过程中,常常遇到各种服务器问题,虽然有服务器厂商的维护,但是往往耗时耗工小编对常见的服务器问题,进行了归纳整理,下面跟各位分享一下。常见故障分析一、恶意攻击在我平时管理网站时,可能会遭到…

java编程能做什么_学习Java编程能做什么工作?

Java作为编程语言界最时髦流行的元老之一,现今在软件市场上也是宠儿,被各大企业广泛应用到生产中。在各种行业、各个企业的业务管理平台,如门户网站等许多方面都占据了主导地位。吸引着越来越多学习Java的各个不同年龄阶段的人群。学习Java的…

python如何关闭窗口仍能运行_Python在退出时关闭自己的CMD shell窗口

让我们首先分析两个发布的Python脚本行在执行Python脚本时真正做了些什么。感谢eryksun进行深入调查,真正使用Python导致正确的描述,现在可以在下面阅读。os.system()导致在前台使用控制台窗口执行cmd.exe /C并停止执行Python脚本,直到Window…

java一年包装_java回顾之包装类

Java包装类由于基本类型比如int,char不具有支持面向对象的编程机制,比如所有引用类型的变量都继承与Object,都可以当成Object使用,如果有个方法需要Object类型的参数,但是实际需要的值却是2,3等数值,这就比较难处理所以…

python3 sleep 并发_python异步编程之asyncio(百万并发)

点击上方蓝字关注我们目录[python 异步编程之 asyncio(百万并发)]一、asyncio二、aiohttp前言:python 由于 GIL(全局锁)的存在,不能发挥多核的优势,其性能一直饱受诟病。然而在 IO 密集型的网络编程里,异步处理比同步处理能提升成…

【Spring实战】02 配置多数据源

文章目录 1. 配置数据源信息2. 创建第一个数据源3. 创建第二个数据源4. 创建启动类及查询方法5. 启动服务6. 创建表及做数据7. 查询验证8. 详细代码总结 通过上一节的介绍,我们已经知道了如何使用 Spring 进行数据源的配置以及应用。在一些复杂的应用中,…

java getxxx_java的invoke与getMethod方法用法

和listener一起使用举例:需要在控件中监听某个动作:比如button点击,画面滚动等1.为控件定义一个属性:属性绑定一个方法xxxProperty "onPropertyXxxxFunc”2.首先自定义一个Listener// 在控件构造函数中获得控件属性的值xxxPr…

windows查看usb信息命令_【VPS】Linux VPS查看系统信息命令大全

本文转自老左笔记,自用mark系统# uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # hostname # 查看计算机名 # lspci -tv # 列出所有PCI设备 # lsusb -tv # 列出所有USB设备 # lsmod # 列出加…

c++ 向量的值逆序输出_C++中vector的常用方法

前言在C中,vector是一个商业转载请联系作者获得授权,非商业转载请注明出处。十分有用的容器。它能像容器一样存放各种类型的对象,简单来说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。相较链表而言&…

java生成密码_java生成密码生成 | 学步园

一、根据当前日期生成MD5加密密码package com.test;import java.security.MessageDigest;import java.text.SimpleDateFormat;import java.util.Date;public class Md5Test {public void toMD5(String plainText) {try {//生成实现指定摘要原文链接:http://www.cnbl…

python怎么创建一个二维数组_python 创建二维数组的方法

废话不多说,直接上代码:#codingutf-8def two_di_demo1():a[]for i in range(10):a.append([])for j in range(10):a[i].append(0)print(a)def two_di_demo2():a[]for i in range(10):a.append([])for j in range(10):a[i].append(0)print(a)b [[0] * 10…

java导出excel到本地_POI导出Excel----导出到客户端(本地)

contentType"application/vnd.ms-excel;charsetutf-8"pageEncoding"utf-8"%>//导入要用的包import"org.apache.poi.hssf.usermodel.HSSFWorkbook"%>import"java.io.FileOutputStream"%>import"org.apache.poi.hssf.user…

无法初始化sftp协议。主机是sftp服务器吗?_WinSCP v5.15.3 免费的 开源图形化 SFTP 客户端...

WinSCP 是一个 Windows 环境下使用的 SSH 的开源图形化 SFTP 客户端。同时支持 SCP 协议。它的主要功能是在本地与远程计算机间安全地复制文件,并且可以直接编辑文件。主要功能WinSCP 可以执行所有基本的文件操作,例如下载和上传。同时允许为文件和目录重…

java中组合_java中组合模式详解和使用方法

组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。这种模式创…