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大山的更多相关文章

  1. 网络编程一定要看过的socket另一座大山

    上次的socket还有很多坑.但是总是在不断的改进的.下面就来看看一个升级版的内容 import socket server = socket.socket() ip_port = ("19 ...

  2. Linux下TCP网络编程与基于Windows下C#socket编程间通信

    一.linux下TCP网络编程基础,需要了解相关函数 Socket():用于套接字初始化. Bind():将 socket 与本机上的一个端口绑定,就可以在该端口监听服务请求. Listen():使s ...

  3. c++ 网络编程(五) LINUX下 socket编程 多种I/O函数 -以及readv和writev函数用法

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9614056.html 一.多种I/O函数 前言:之前我们讲的数据传输一般Linux上用writ ...

  4. c++ 网络编程(六)LINUX下 socket编程 多播与广播 实现一次发送所有组客户端都能接收到

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9614288.html 一.多播 锲子:有这么一种情况,网络电台可能需要同时向成千上万的用户传输 ...

  5. c++ 网络编程(七) LINUX下 socket编程 基于套接字的标准I/O函数使用 与 fopen,feof,fgets,fputs函数用法

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9614820.html 一.标准I/O 1,什么是标准I/O?其实是指C语言里的文件操作函数,如 ...

  6. javase的网络编程(InetAddress,UDP,TCP,URL,Socket,DatagramSocket)

    通过一段时间对java网络编程相关内容的学习,写下这篇随笔,对这一部分的知识进行梳理和总结. 网络编程 一.网络编程三要素: IP地址:网络会给每个联网的主机分配一个数字的编码地址,该地址就是IP地址 ...

  7. 从零探索Java网络编程01之 TCP/IP 与 Socket

    最近完成了几项比较简单的项目, 终于是在996里偷了点闲暇时光, 想着来研究研究些啥吧?  一个普通的控制台日志映入了我的眼帘(孽缘呀): (图中使用 SpringBoot 的 log4j 来输出日志 ...

  8. 网络编程:tcp、udp、socket、struct、socketserver

    一.TCP.UDP 一.ARP(Address Resolution Protocol)即地址解析协议,用于实现从 IP 地址到 MAC 地址的映射,即询问目标IP对应的MAC地址. 二.在网络通信中 ...

  9. Socket网络编程--FTP客户端(60篇socket博客,而且都比较简单、深入浅出)

    已经好久没有写过博客进行分享了.具体原因,在以后说. 这几天在了解FTP协议,准备任务是写一个FTP客户端程序.直接上干货了. 0.了解FTP作用 就是一个提供一个文件的共享协议. 1.了解FTP协议 ...

随机推荐

  1. Spring LazyInitializatoinException

    今天做project创建了一个新的类A,这个新类包含了一个另外一个类B的Set.B类包含了另外一个C类的集合... public class A{ @Id int id; @OneToMany(fet ...

  2. python orm框架

    #!/usr/bin/python# -*- coding: utf-8 -*-from sqlalchemy import create_enginefrom sqlalchemy import T ...

  3. vue安装遇到vue不是内部变量

    配置path系统变量 打开我的电脑-->右键属性-->高级系统设置-->环境变量-->Path-->添加获得npm的位置(搜索vue.cmd 可以找到该位置) 全局安装位 ...

  4. 本地pip 源搭建起来

    pip install pip2pi pip2tgz target_dir -r requirement.txt 下载想要的本地的py包  /usr/local/python3/bin/dir2pi ...

  5. C语法简单测试

    1.未初始化的枚举变量 /* uninitialized-enum.c */ #include <stdio.h> , black, blue}; int main(void) { enu ...

  6. webservice接口,用Soapui

    webservice接口怎么测试呢,他不需要你在拼报文了,会给一个webservice的地址,或者wsdl文件,直接在soapui导入,就可以看到这个webservice里面的所有接口,也有报文,直接 ...

  7. 机器学习笔记(四)Logistic回归模型实现

     一.Logistic回归实现 (一)特征值较少的情况 1. 实验数据 吴恩达<机器学习>第二课时作业提供数据1.判断一个学生能否被一个大学录取,给出的数据集为学生两门课的成绩和是否被录取 ...

  8. div css 图片和文字上下居中对齐

    想要图片和文字水平居中对齐很容易,可今天做这个树的时候,遇到了要将图片上下居中.这下就不知道怎么搞. 拿手册看也看不出所以然来,不同的浏览器对DIV的支持不一个,目前最好的浏览器是Firefox. 这 ...

  9. 四:客服端防护HTTP发送请求类

    一.源代码: public class swtDefendOperate{private BackgroundWorker backgroundWorker;//DefendType的值 Verify ...

  10. Delphi Redis Client

    https://github.com/danieleteti/delphiredisclient