网络编程一定要看过的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协议 ...
随机推荐
- c# 关于Threading.ApartmentState
今天在做一个需求 就是 客户端的注销重新登录的操作,想必大家很清楚这个逻辑应该怎么去做, 在主线程里面去调用这个注销的方法 然后关闭当前应用域,重新开一个线程 让应用域在上面执行. STA(singl ...
- python 生成器(generator)的生成方式
generator包括生成器和带yield的generator函数. 写了一个生成杨辉三角的小例子: # -*- coding:utf-8 -*- def triangles(): l = [1] w ...
- Shadow Properties之美(二)【Microsoft Entity Framework Core随笔】
接着上一篇Shadow Properties之美(一),我们来继续举一个有点啰嗦的栗子. 先看简单需求:某HR系统,需要记录员工资料.需要记录的资料有: 员工号(规则:分公司所在城市拼音首字母,加上三 ...
- 【版本更新】开发工具DevExtreme发布v18.2.7|附下载
DevExtreme Complete Subscription是性能最优的 HTML5,CSS 和 JavaScript 移动.Web开发框架,可以直接在Visual Studio集成开发环境,构建 ...
- Problem B: 一切皆对象
Description 一切都是对象 —— Everything is an object. 所以,现在定义一个类Thing,来描述世界上所有有名字的事物.该类只有构造函数.拷贝构造函数和析构函数,并 ...
- php上传文件配置
根据需要调整php.ini文件内容,完成后重启服务器即可. 上传文件相关配置内容: file_uploads = on ;是否允许通过HTTP上传文件的开关.默认为ON即是开 upload_tmp_d ...
- error: ‘module’ object has no attribute ‘_rebuild_tensor_v2’
import torch._utils try: torch._utils._rebuild_tensor_v2 except AttributeError: def _rebuild_tensor_ ...
- Unity ECS 初探
1.安装 安装两个包 2.初探 实例化 注:实例化的实体并不会在Hierarchy视图里面显示,可在EntityDebugger窗口里面显示,因此需要显示的话需要添加Rendermeshcompone ...
- 使用shell安装lnmp
1.简介 使用shell脚本安装lnmp,纯粹是偷懒,平时安装一些东西都写成脚本了,方便以后在其他机器安装的时候不用再去查找文档. PHP版本5.6.6 MYSQL版本5.6.26 NGINX版本1. ...
- elasticsearch(1) 安装和使用
一.简介 Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎.无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进.性能最好的.功能最全的搜索引擎库. 但是 ...