# 网络编程

# 计算机网络, 把多台独立自主的计算机,连接到网络,实现资源的共享

# Internet网,(互联网)eniac 1946美国大学第一台电子计算机

#

# 一个TCP报文除了包含要传输的数据外,还包含源IP地址和目标IP地址,源端口和目标端口。

# ISO协议

# 传数据,切小片,校验 TCP - 保证正确 UDP - 速度快,但是会有误差。

# 每个联网的设备都有IP地址。

# HTTP -- Hyper-Text Transfer Protocol-80

# SMTP - Simple Mail Transfer Protocol-25

# POP3 - Post Offce Protocol verdion3-110

# IMAP -Internet Mail Access Protocol

# HTTPS-443

# 再应用层,利用TCP和UDP来传输数据。 做法,套接值。

TCP 服务器

#做一个联网的应用#netstat 查看所有端口 telnet连接别人的IP

from socket importsocket, AF_INET, SOCK_STREAMimportdatetimedefmain():#规定:ipv4的协议

#server = socket(AF_INET, SOCK_STREAM) 可以省略

#1.创建一个基于TCP协议的套接字对象。

#因为我们做的是应用级的产品或服务,所以可以利用现有的传输服务来实现数据传输。

server =socket()#2.绑定在IP地址(网络上主机的身份标识),和端口(用来区分不同服务的IP地址的扩展)

server.bind(('10.7.189.77', 6791)) #包含ip地址和端口号,对应电脑和服务-应用。

#3.开始监听客户端的连接。

server.listen(512) #512 - 为等待队列的大小。

print('服务器已经启动!正在监听。。。')whileTrue:#通过accept方法,接受客户的连接,accept是一个阻塞式的方法:

#如果没有客户端连接,那么accept方法会让代码阻塞,直到有客户段连接成功才返回-- 元组,

#accept 方法返回一个元组,元组中第一个值代表客户端的对象,

#元组的第二个值又是一个元组,其中有的客户端的ip地址和端口。

client, addr =server.accept()print(client)print(addr, '连接成功')

t=datetime.datetime.now()print(t)

client.send(str(t).encode('utf-8'))#client.close()

if __name__ == '__main__':

main()

TCP客户端

from socket importsocketdefmain():

client=socket()

client.connect(('10.7.189.77', 6790))

data= client.recv(1024)print(type(data))print(data.decode('utf-8'))if __name__ == '__main__':

main()

多线程下载图片

importjsonimportrequestsfrom threading importThreadclassPictureLoad(Thread):def __init__(self, url):

super(PictureLoad, self).__init__()

self._url=urldefrun(self):

resp=requests.get(self._url)

filename= self._url[self._url.rfind('/') + 1:]try:

with open(filename,'wb') as fs:

fs.write(resp.content)exceptIOError as e:print(e)defmain():

resp= requests.get('http://api.tianapi.com/meinv/?key=81085f5747a59581327b29d1bccfb925&num=10')

my_dict=json.loads(resp.text)

threads=[]for temp in my_dict['newslist']:

pic_url= temp['picUrl']

pictureload=PictureLoad(pic_url)

pictureload.start()#resp = PictureLoad(pic_url).start()

threads.append(pictureload)for thread inthreads:

thread.join()print('图片下载完成')if __name__ == '__main__':

main()

单人线程版聊天室

#服务器

from socket importsocketfrom threading importThreadclassAccept(Thread):def __init__(self, client):

super(Accept, self).__init__()

self._client=clientdefrun(self):

data= self._client.recv(1024)return print(data.decode('utf-8'))classSend(Thread):def __init__(self, client, sentence):

super(Send, self).__init__()

self._sentence=sentence

self._client=clientdefrun(self):

self._client.send(str(self._sentence).encode('utf-8'))defmain():

server= socket() #创建对象

server.bind(('10.7.189.77', 6672)) #绑定IP和端口

server.listen(512) #同时连入数,最大等待数

print('程序已经启动,正在监听。。。。')whileTrue:

client, addr= server.accept() #接受连入的对象,前面为服务器的地址,后面为客户端的IP

print(addr, '已经连接')whileTrue:

accept= Accept(client) #使用线程接受消息

accept.start()#print(data.decode('utf-8'))

#data = client.recv(1024)

#print(data.decode('utf-8'))

t= input('请输入你要发送的话:') #发送消息

send =Send(client, t)

send.start()if __name__ == '__main__':

main()

# 客户端

from socket importsocketfrom threading importThreadclassSend(Thread):def __init__(self, client, me):

super(Send, self).__init__()

self._client=client

self._me=medefrun(self):

self._client.send(str(self._me).encode('utf-8'))defmain():

client= socket() #1.创建对象

client.connect(('10.7.189.130', 8080)) #2.连接服务器

print('连接成功')whileTrue:

me= input('请输入你要说的话:') #发送消息

#client.send(str(me).encode('utf-8'))

send = Send(client, me) #使用线程

send.start()

data= client.recv(1024)print(data.decode('utf-8'))if __name__ == '__main__':

main()

# 多人版线程聊天

# 服务器

from socket importsocketfrom threading importThreaddefmain():classRefreshScreenThread(Thread):def __init__(self, client):

super(RefreshScreenThread, self).__init__()

self._client=clientdefrun(self):whileTrue:

data= self._client.recv(1024)print(data.decode('utf-8')) #一直接受消息并打印出来

myclient= socket() #创建对象

myclient.connect(('10.7.189.130', 11110)) #连接服务器

RefreshScreenThread(myclient).start() #刷新接受到的消息

nickname = input('请输入你的昵称:')

running=Truewhilerunning:

content= input('请发言:')if content == 'byebye':

running=Falseelse:

content= nickname + ':' +content

myclient.send(str(content).encode('utf-8')) #发送消息

if __name__ == '__main__':

main()

# 客户端

from socket importsocketfrom threading importThreaddefmain():classClienthandler(Thread):def __init__(self, client):

super(Clienthandler, self).__init__()

self._client=clientdefrun(self):whileTrue:try:

data= self._client.recv(1024) #接受二进制数据

for client inclients:

client.send(data)#print(data.decode('utf-8'))

if data.decode('utf-8') == 'byebye':

clients.remove(self._client)

self._client.close()exceptException as ex_msg:print(ex_msg)

clients.remove(self._client)breakserverce= socket() #1. 创建套接制对象

#AF_INET ip4 SOCK_STREAM = TCP 为默认值。

#Python 命令行参数-- sys.argv

serverce.bind(('10.7.189.77', 8891)) #2. 绑定地址, ip(127.0.0.1\localhost)和ip地址的扩展--端口(1024-65535)

serverce.listen(512) #最大连入数,等待数。

print('用户连入,开始监听。。。')

clients=[]whileTrue:

cuur_client, addr= serverce.accept() #阻塞式的方法,接受用户的请求。

clients.append(cuur_client) #把连入的用户,放到一个列表里。

Clienthandler(cuur_client).start()if __name__ == '__main__':

main()

UDP

发消息

from socket importsocket, SOCK_DGRAMfrom time importsleepdefmain():

sender= socket(type=SOCK_DGRAM) #UDP套接制 速度快,但是容易丢失 1. 创建对象

with open('zms.jpg', 'rb') as f:

data=f.read()#f.seek() # 标记,从头移动到尾部

#f.tell #

data_len =len(data)

total=0while total

sender.sendto(data[total:total+1023], ('10.7.189.77', 8899))

total+= 1024sleep(0.0001)if __name__ == '__main__':

main()

接消息

from socket importsocket, SOCK_DGRAMdefmain():

receiver= socket(type=SOCK_DGRAM)

receiver.bind(('10.7.189.77', 8899)) #2.我在这个端口等着你给我数据

data =bytes()whileTrue:

seg, addr= receiver.recvfrom(1024) #3. 收数据,指定缓冲区大小。

data += seg #数据的拼接

if len(data) >= 27112:breakwith open('zms1.jpg', 'wb') as f:

f.write(data)print('图片已接收')#receiver.recvfrom()

if __name__ == '__main__':

main()

多线程 python tcp 图片_Python第四周之网络编程TCP (服务器/客户端; 线程下载图片;线程版服务器和客户端(单人、多人)) UDP...相关推荐

  1. python网络通信框架_Python运维-Socket网络编程 (1)

    Python socket 简介 在计算机通信领域,socket 被翻译为"套接字",它是计算机之间进行通信的一种约定或一种方式.通过 socket 这种约定,一台计算机可以接收其 ...

  2. python tcp不用循环监听_网络编程: TCP

    1. IP 地址 概念: 标识网络中设备的地址(需要联网才有没有联网, 是没有这个地址) 表现形式: ipv4 目前主要使用的, 点分十进制的格式,(192.168.3.43) 分为 4 段, 每段的 ...

  3. python socket 主动断开_Python网络编程tcp详解(基础篇十四)

    网络编程tcp 1 TCP详解 <1> tcp概述 TCP:英文全拼(Transmission Control Protocol)简称传输控制协议,它是一种面向连接的.可靠的.基于字节流的 ...

  4. Qt:Qt实现Winsock网络编程—TCP服务端和客户端通信(多线程)

    Qt实现Winsock网络编程-TCP服务端和客户端通信(多线程) 前言 感觉Winsock网络编程的api其实和Linux下网络编程的api非常像,其实和其他编程语言的网络编程都差不太多.博主用Qt ...

  5. python下载图片超时_python3在极端网络波动下的智能判断下载

    作者: 孔扎根 简介: 工作13余载,现任高级爬虫工程师,在工作中积累了丰富的数据库.ETL及python开发方面的经验. 座佑铭:美的东西都喜欢, 好的东西都想要, 美好的东西是我追求的目标 Pyt ...

  6. Python网络编程——TCP与UDP

    Python网络编程 TCP(复杂可靠)与UDP(简单不可靠)的区别 1) TCP提供面向连接的传输,通信前要先建立连接(三次握手机制): UDP提供无连接的传输,通信前不需要建立连接. 2) TCP ...

  7. Java网络编程 ---- TCP 网络通信编程

    视频:[零基础 快速学Java]韩顺平 零基础30天学会Java 文章目录 1. Socket 2. TCP 网络通信编程 3. 应用案例 1(使用字节流) 4. 应用案例 2(使用字节流) 5. 应 ...

  8. QT入门第七天 网络编程TCP/IP/UDP+Http和JSON解析+qt事件软键盘【CSDN最详细】

    网络编程+Http和JSON解析+qt事件软键盘 第一章 QT中的网络编程 [1]涉及到的类 [2]tcp协议的流程 [2.1]服务器的流程 socket-->bind-->listen- ...

  9. java全双工_java网络编程TCP聊天全双工

    我正在实现服务器和客户端之间的简单TCP聊天.我使用多线程,因此服务器和客户端可以同时发送和接收数据(全双工).该程序可以工作,但如果服务器有一个控制台既可以输入发送消息,也可以显示接收消息(对于客户 ...

最新文章

  1. 一次完整的HTTP事务过程--超详细!
  2. python 星号*使用方法
  3. 战棋类中实现的移动范围
  4. .NET Core:跨平台和开源,让我在框架中脱颖而出
  5. Hadoop-HBASE案例分析-Hadoop学习笔记二
  6. JDBC初学者的basedao工具类
  7. 收藏 | 一文看懂注意力机制
  8. 如何 把 laravel model 的主键修改为字符串类型
  9. 计算机乐谱吃鸡,Capo可自动识别音乐生成乐谱
  10. 怎么解决mysql登录闪退问题
  11. 七牛云上传的视频通过外链播放黑屏问题
  12. STC12C5A60S2
  13. 怎么检测声音频率和幅值_作者特稿铝板塑性损伤的电磁超声非线性检测新方法...
  14. Java 实现十进制数转换为二进制
  15. HDU-6638 Snowy Smile 区间最大子段和
  16. 阶梯博弈(Staircase Nim)
  17. 赵小楼《天道》《遥远的救世主》问答集(5)每一条评论都是一个独立意识所展现的相,在这是用文字问答的形式呈现出来的相
  18. Cannot cast ch.qos.logback.classic.servlet.LogbackServletContainerInitializer to javax.servlet.Servl
  19. 小饶学编程之JAVA SE第一部分——二分查找法
  20. 打印信息无法连接服务器,打印机无法连接服务器

热门文章

  1. spring boot 的常用注解使用 总结
  2. C#:添加web service引用
  3. MessageBox不能应用皮肤的解决办法
  4. 桌面打开图片时很慢,显示正在生成预览好几秒的解决办法
  5. java 异常的捕获及处理
  6. 避免HttpClient的”javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated”异常
  7. 推送提交到另一个分支
  8. 如何使用包含属性名称的变量检查对象属性是否存在?
  9. 整数除以JavaScript中的余数?
  10. 如何将github存储库回滚到特定提交?