day32网络编程

引子

目前编写程序/软件的问题:现在只会写单机程序,无法实现两个计算机之间信息的互相传输。

学习网络编程本章的目的:就是实现两个计算机之间信息的互相传输。

 

那么如何实现两个计算机之间信息的互相传输?

答:那你就需要联网了,

联网通讯需要2点:

1.物理介质     2.通讯协议

接着什么是互联网?

互联网的核心就是由一堆协议组成,协议就是标准,比如全世界人通信的标准是英语。

如果把计算机比作人,互联网协议就是计算机界的英语。所有的计算机都学会了互联网协议,那所有的计算机都就可以按照统一的标准去收发信息从而完成通信了。

一。客户端/服务器架构

1.硬件C/S架构(打印机)

2.软件C/S架构

  互联网中处处是C/S架构:

  如网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种)

  腾讯作为服务端为你提供视频,你得下个腾讯视频客户端才能看它的视频)

***C/S架构与socket的关系:

我们学习socket套接字就是为了完成C/S架构的开发。

 

二。osi七层协议,也叫osi七层模型

为何学习socket一定要先学习互联网协议?:

1.首先:本节课程的目标就是教会你如何基于socket编程,来开发一款自己的C/S架构软件。

2.其次:C/S架构的软件(软件属于应用层)是基于网络进行通信的。

3.然后:网络的核心即一堆协议,协议即标准,你想开发一款基于网络通信的软件,就必须遵循这些标准。

4.最后:就让我们从这些标准开始研究,开启我们的socket编程之旅。

 

osi七层协议各是什么?以及有什么作用用来干什么?

人们按照分工不同,把互联网协议从逻辑上划分了层级:

互联网协议,按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层

 

 

 

 

传输层的tcp协议udp协议:

是什么?

怎么用?

 

 

。socket套接字

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

其实站在你(程序员)的角度上看,socket就是一个模块。我们通过调用模块中已经实现的方法建立两个进程之间的连接和通信。
也有人将socket说成ip+port,因为ip是用来标识互联网中的一台主机的位置,而port是用来标识这台机器上的一个应用程序。
所以我们只要确立了ip和port就能找到一个应用程序,并且使用socket模块来与之通信。

 

1.基于TCP的套接字

tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端.

TCP客户端:

import socket
# 1.创建一个代表服务器的socket对象
s = socket.socket()

# 2.绑定端口号和IP地址
# 127.0.0.1 表示当前这个电脑的ip
address = ("127.0.0.1",8080)
s.bind(address)

print("服务器已启动!")

# 3.开始监听这个端口
# 5表示 可以有5个处于半连接状态的连接   指的不是最大连接数
s.listen(5)
print("test")

# 4.接受连接请求
# 该函数是阻塞的 会卡主程序的执行,必须等到有一个客户端进来才会继续执行
# 返回元组  第一个是代表客户端的socket对象 第二客户端的地址信息
client,c_address = s.accept()
print("有一个连接已建立!")
print(client,c_address)

# 给客户端发送数据

# 5.读写数据
# 接受数据
res = client.recv(1024)
print(res)



# 6.关闭连接???
# s.close()
 

 


import socket

# 1.创建客户端的socket对象
c = socket.socket()
print(c)
# 2.指定服务器的ip和port
server_address = ("127.0.0.1",8080)

# 3.建立连接
c.connect(server_address)

# 4.读写数据
# 发送数据到服务器
c.send("hello 我是客户端!".encode("utf-8"))

# 5.关闭连接
c.close()
 

 

2.基于UDP的套接字

posted @ 2018-11-02 20:57  timm_book  阅读(49)  评论(0)    收藏  举报