网络编程一定要看过的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协议 ...
随机推荐
- Linux内核数据结构之kfifo详解
本文分析的原代码版本: 2.6.24.4 kfifo的定义文件: kernel/kfifo.c kfifo的头文件: include/linux/kfifo.h kfifo是内核里面的一个First ...
- nopcommerce 4.1 core 学习 增加商城配置属性
需求: 原本是想用nop 来做国际版的商城,可以像亚马逊那样 国内外通用, 专门增加一个跨进元素属性. 学习里面的一些架构思想. 国内的行情还是 像himall 会比较实用. 这是在商城的综合 ...
- xcode的打包上线出问题:导入此构建版本时出错
原因:升级mac系统到了High sierra(10.13,目前还是测试版,并没有正式版,全新的文件系统 APFS (Apple File System))发现没有这个问题,于是乎,所以给出这种解决方 ...
- Write CSV file for a dataset
import numpy as np import cv2 as cv2 import os import csv dataste_path = 'datasets/pascal-parts/pasc ...
- DevExpress v18.2新版亮点——Reporting篇(二)
行业领先的.NET界面控件——DevExpress v18.2日前正式发布,本站将以连载的形式为大家介绍新版本新功能.本文将介绍了DevExpress Reporting v18.2 的新功能,新版3 ...
- pypyodbc 的坑
1, 你要先确认你自己的office的版本, 你要安装access dabase engine. 但是 sb 微软的驱动 32位的不让装, 64位的也不让装, 吐槽微软100次---MS个大SX. 最 ...
- docker学习常用指令---第五章节
前面我们了解了docker的基本概念,和docker镜像,端口相关的内容.在具体的实际操作过程中,我们需要了解一些相关的docker操作指令. 一.Docker save指令 指令功能:将指定镜像保存 ...
- web语言发展史
引用自CSDN,地址:https://blog.csdn.net/moshenglv/article/details/51590830 提到Web,不得不提一个词就是“互联网”.Web是World W ...
- jsp视频如何播放
网站开发小白们对如何插入视频有较大的困扰,一段时间不知道从何下手,想在数据库里面直接导入,但没能成功,后又尝试直接在myeclipse里面直接放入视频. 对于不同的播放器,视频的格式也有要求,建议使用 ...
- Hadoop Hive HBase Spark Storm概念解释
HadoopHadoop是什么? 答:一个分布式系统基础架构. Hadoop解决了什么问题? 答:解决了大数据(大到一台计算机无法进行存储,一台计算机无法在要求的时间内进行处理)的可靠存储(HDFS) ...