网络编程一定要看过的socket大山
python已经可以做很多的东西了。但是要想要和别人互联互通就会涉及到一个关键的模块socket!值得一提的是,其实socket不是python独创的一种模块,而是任何语言都会有的一个部分!自己的程序和别的电脑进行连接的时候都会用到这个方式!
但是,首先还是来看看网络通信的相关的知识,然后再慢慢的了解socket!
其实根据不同的场景大概可以分为两种情况:C/S架构和B/S架构
C/S架构的意思就是客户端和服务端的连接方式。就像是手机上的某些app程序和人家公司的服务器的沟通一样。
B/S 就是浏览器和服务端的连接方式!有了这样的统一的协议方式,大家才能用一个浏览器就可以访问不同的网站!
关于网络通信的整个流程是怎样的呢?
上网首先就要有网卡(就是插网线的地方。)然后还要有一个独有的身份认证mac地址。mac地址可是全球唯一的。出厂都设计好的。通常是由12位16进制的数字表示(前六位是厂商编号,后六位是流水线号!)
查看方法:window在cmd中输入ipconfig-all这样的指令
有了mac其实还是不够的。因为在一个局域网中,如果很多的电脑都用mac作为识别的标志。而网络传递信息的方式都是通过广播(交换机会把消息传递给每一个电脑,让电脑自己进行匹配,如果不是自己电脑的mac地址的,就会把消息给扔掉!)的形式的话,那么就很容易造成严重的拥堵,而且信息也是不安全的!
此时,IP的作用就显示出来了!有了IP就可以和同的局域网中的电脑进行消息传递了!
现在搞清了有mac和IP这两样东西就可以看下面的小案例了!
下面就用实际的小案例来看看上网过程是如何完成的.
第一步:打开浏览器,输入网址。其实看上去是在输入域名,但实际上DNS服务器会自动的翻译成一个目标网站的IP地址!
第二步:找到IP后,路由器还有一个自己的路由器的IP协议,自动的找到最优的一个路径!
第三步:目标的路由器发送请求给目标网站的服务器
第四步:目标网站的服务器返回信息
第五步:其实在你打开浏览器的时候,电脑已经给你配置了一个端口号,返回的信息会通过这个端口号来给你信息!
又会有很多朋友想要问:那平时说的内网和外网都是指什么呢?
所谓的内网就是局域网。局域网可以独立的封闭运行。外网就是广域网。很多的局域网和独立的服务器组成。
这里也有一个小知识就是在一个局域网内,一个IP必须是唯一的!就是说在这个独立网络连接中,这个IP就是对应一个电脑。但是要是和别的局域网连接的话,别的局域网有可能有重名的IP号码,这是很正常的,都是能用的!
下面看看怎么用socket代码
import socket
server=socket.socket()
ip_port=("192.168.111.1",8000)
server.bind(ip_port)
server.listen()
conn,addr=server.accept()
while True:
from_client_data=from_client_data.decode("utf8")
print(from_client_data)
if from_client_data=="bye"
break
sever_input=input("对方表示:")
conn.send(server_input.encode("utf8"))
if server_input=="bye"
break
conn.close()
server.close()
那么客户端应该如何来进行连接呢?
import socket
import time
client = socket.socket()
server_ip_port=("192.168.111.1",8001)
client.connect(server_ip_port)
while True:
client_input=input("想要说")
client.send(client_input.encode("utf8"))
if client_input=="bye"
break
from_server_data = client.recv(1024)
print(“服务端”,from_server_data.decode(utf8))
if from_server_data.decode("utf8")=="bye":
break
client.close()
记得一定要先启动服务端,然后再用客户端
网络编程一定要看过的socket大山的更多相关文章
- 网络编程一定要看过的socket另一座大山
上次的socket还有很多坑.但是总是在不断的改进的.下面就来看看一个升级版的内容 import socket server = socket.socket() ip_port = ("19 ...
- Linux下TCP网络编程与基于Windows下C#socket编程间通信
一.linux下TCP网络编程基础,需要了解相关函数 Socket():用于套接字初始化. Bind():将 socket 与本机上的一个端口绑定,就可以在该端口监听服务请求. Listen():使s ...
- c++ 网络编程(五) LINUX下 socket编程 多种I/O函数 -以及readv和writev函数用法
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9614056.html 一.多种I/O函数 前言:之前我们讲的数据传输一般Linux上用writ ...
- c++ 网络编程(六)LINUX下 socket编程 多播与广播 实现一次发送所有组客户端都能接收到
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9614288.html 一.多播 锲子:有这么一种情况,网络电台可能需要同时向成千上万的用户传输 ...
- c++ 网络编程(七) LINUX下 socket编程 基于套接字的标准I/O函数使用 与 fopen,feof,fgets,fputs函数用法
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9614820.html 一.标准I/O 1,什么是标准I/O?其实是指C语言里的文件操作函数,如 ...
- javase的网络编程(InetAddress,UDP,TCP,URL,Socket,DatagramSocket)
通过一段时间对java网络编程相关内容的学习,写下这篇随笔,对这一部分的知识进行梳理和总结. 网络编程 一.网络编程三要素: IP地址:网络会给每个联网的主机分配一个数字的编码地址,该地址就是IP地址 ...
- 从零探索Java网络编程01之 TCP/IP 与 Socket
最近完成了几项比较简单的项目, 终于是在996里偷了点闲暇时光, 想着来研究研究些啥吧? 一个普通的控制台日志映入了我的眼帘(孽缘呀): (图中使用 SpringBoot 的 log4j 来输出日志 ...
- 网络编程:tcp、udp、socket、struct、socketserver
一.TCP.UDP 一.ARP(Address Resolution Protocol)即地址解析协议,用于实现从 IP 地址到 MAC 地址的映射,即询问目标IP对应的MAC地址. 二.在网络通信中 ...
- Socket网络编程--FTP客户端(60篇socket博客,而且都比较简单、深入浅出)
已经好久没有写过博客进行分享了.具体原因,在以后说. 这几天在了解FTP协议,准备任务是写一个FTP客户端程序.直接上干货了. 0.了解FTP作用 就是一个提供一个文件的共享协议. 1.了解FTP协议 ...
随机推荐
- BUG调试: Jump to the invalid address stated on the next line at 0x0: ???
gdb或者vlagrind报告: ==14569== Jump to the invalid address stated on the next line ==14569== at 0x0: ??? ...
- 1、Python2.7编译安装
下载Python安装包(下载地址:https://www.python.org/downloads/) 选择Python 2.7.3版本 防止交互式模式下出现方向键乱码问题,需安装相关包 yum in ...
- generator mybatis逆向工程
mybatis逆向工程:根据数据库中的表在项目中生成对应的 实体类,dao接口与mapper.xml映射文件 在eclipse中,以插件的形式的存在,把设置好的配置文件,直接通过eclipse中的插件 ...
- 如何使用VMware安装rhel6.4操作系统(详细步骤)
第一步,打开VMwareWorkStation11创建新的虚拟机.如下图所示. 第二步,点击文件,然后选新建虚拟机.,新建虚拟机向导,选择自定义. 第三步,选择虚拟机硬件兼容性.选择WorkStati ...
- 表单传值给@Controller
<form action="springmvc/testModelAttributes" method="post"> <input type ...
- [ffmpeg]安装
下载源码: 我们选择去官网http://ffmpeg.org下载.版本和打包方式譬如:ffmpeg-3.1.11.tar.bz2 安装过程: tar -jxvf ./ffmpeg-3.1.11.t ...
- mysql建表时
问题:Incorrect column specifier for column 'id' 答案:原来自动增长列用int数据类型,不用varchar
- 移动端弹出层加遮罩后禁止body滑动
//实现滚动条无法滚动 var mo=function(e){e.preventDefault();}; /***禁止滑动***/ function stop(){ document.body.sty ...
- 马凯军201771010116《面向对象与程序设计Java》第十周学习总结
一.理论知识学习部分 泛型类的约束与局限性: 不能用基本类型实例化类型参数 运行时类型查询只适用于原始类型 不能抛出也不能捕获泛型类实例 参数化类型的数组不合法 不能实例化类型变量 泛型类的 ...
- win7安装python3.6.1及scrapy
---恢复内容开始--- 第一篇博客,记录自己自学python的过程及问题. 首先下载python3.6.1及所需资料 百度云:https://pan.baidu.com/s/1geOEp6z 密码: ...