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))#开始监听, 传入的参数

python tcp协议_python 网络编程 -- Tcp协议相关推荐

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

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

  2. python udp通信_Python网络编程(三)

    回顾 在<Python进阶记录之网络编程(二)>中,我们介绍了UDP端口号的基本概念和作用以及Python中UDP服务端的端口绑定和简单创建.今天我们利用UDP server和UDP cl ...

  3. python socket tcp客户端_python网络编程socketserver模块(实现TCP客户端/服务器)

    摘录python核心编程 socketserver(python3.x版本重新命名)是标准库中的网络编程的高级模块.通过将创建网络客户端和服务器所必须的代码封装起来,简化了模板,为你提供了各种各样的类 ...

  4. python作品阐述_Python网络编程基础的作品鉴赏-

    Python网络编程基础的作品鉴赏 Python网络编佳入门图书!175个完整,实践出真知,SocketsDNS.Web Service.FTP.Email.SMTP.POP.IMAP.SocketS ...

  5. python socket服务器_python网络编程学习笔记(三):socket网络服务器

    1.TCP连接的建立方法 客户端在建立一个TCP连接时一般需要两步,而服务器的这个过程需要四步,具体见下面的比较.步骤 TCP客户端 TCP服务器 第一步 建立socket对象 建立socket对象 ...

  6. python socket 域名_Python网络编程中的套接字名和DNS解析。

    距离上一次TCP的文章,这一次要讲的是套接字名和DNS,并且还会涉及到网络数据的发送接受和网络错误的发生和处理. 下面说套接字名,在创建和部署每个套接字对象时总共需要做5个主要的决定,主机名和IP地址 ...

  7. python的网络应用_python 网络编程的应用模块

    os 中自带的随机字符串,输出为bytes类型,可以定制长度,不可转化为正常的字 import os ch = os.urandom print(sh) hmac为python中自带的模块,它是用来实 ...

  8. JAVA零学习之基础归纳(十八)--网络编程、协议、IP、基本API、URL、socket等

    [Java程序可以非常方便的访问互联网上的 HTTP服务.FTP服务等,并可以直接取得互联网上的远程资源,还可以向远程资源发送 GET.POST请求] 一.网络编程 1.1 网络概念和分类 所谓计算机 ...

  9. java socket ip_JAVA 网络编程 TCP/IP、Socket 和协议设计

    [JAVA 网络编程 TCP/IP.Socket 和协议设计] TCP/IP 协议简介 IP 首先我们看 IP(Internet Protocol)协议.IP 协议提供了主机和主机间的通信. 为了完成 ...

最新文章

  1. java服务端开发 php_PHP使用thrift做服务端开发
  2. java中的快速生成代码
  3. Cocostudio 1.6 下载地址
  4. 如何查看jinja2模板的上級_如何使用Python的Flask和谷歌app Engine来构建一个web app...
  5. SQL_Server_2008完全学习之第八章Transact-SQL编程
  6. 牛客 - 红蓝图(克鲁斯卡尔重构树的dfs序上建主席树)
  7. c#Clay开源的动态语言dynamic框架,让您形如javascript的方式创建对象!
  8. Maven搭建Nexus私服
  9. linux服务器证书安装教程,linux服务器使用certbot免费安装ssl证书
  10. vb不能插入png图片_VB6.0载入PNG格式图片
  11. 说明 RISC 和 CISC 指令系统的区别?
  12. UtIL DBUtil
  13. 关于AD导Gerber文件的理解和总结
  14. 机器学习常见数据集下载(免费)
  15. graphpad做单因素方差分析_Graphpad做单因素方差分析步骤详解
  16. 【图像去噪】基于马尔可夫随机场实现图像去噪附matlab代码
  17. php 微信签到功能,微信小程序实现签到功能
  18. x轴z轴代表的方向图片_x轴y轴z轴代表的方向_x轴y轴z轴代表的方向图
  19. 如何使用ps去改变图片的背景颜色(白底、蓝底和红底)
  20. 代价敏感随机森林Python附代码

热门文章

  1. ws5102怎么设置虚拟服务器,【华为路由器WS5102怎么设置开双频】规格参数|限速|APP|配置|功耗_摘要频道_什么值得买...
  2. cos66度20分怎么用计算机算,物化2期末考试计算复习题
  3. oracle connect权限6,Oracle 19c 升级19.6 RU 导致权限异常 gipcInternalConnectSync: failed sync request 解决方法...
  4. php mysql having_having的用法
  5. 基于torch.nn.functional.conv2d实现CNN
  6. 校招萌新在阿里妈妈是如何成长的
  7. java新建配置文件_使用Java输出字符流FileWriter创建配置文件
  8. oracle需求分析,8-oracle_分析函数(二)
  9. php特殊字符转化函数,PHP函数将Unicode转换成特殊字符?
  10. PAT_B_1009_Java(20分)