python网络编程之TCP/IP协议和socket函数

1、网络编程就是通过网络让不同计算机上运行的程序可以进行通信。
2、软件间的通信分为两种 应用类程序(QQ)和web类程序(百度)
3、客户端:就是常用的程序QQ;
服务端:一致运行着个别人的提供服务的机器
4、软件开发架构:C/S 架构(客户端和服务器的架构)和B/S架构(浏览器端与服务器端架构)

5、IP地址是电脑在网络世界中全球唯一标识,地址是一个32位的二进制数,被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例:点分十进IP地址(100.4.5.6),实际上是32位二进制数(01100100.00000100.00000101.00000110)。
6、网卡上有全球唯一的物理地址(mac),长度为48位2进制,通常有12位16进制表示(前6位是厂商 编号,后六位是流水线号)

查自己电脑的IP和mac地址,可以通过cmd----输入ipconfig/all

通过IP地址就能找到物理地址(mac),就要遵循地址解析协议(TCP/IP)

电脑上的每一个应用程程序同时间只能被一个应用程序占用,电脑上一共有65536个端口,一般从1024开始指定端口。

7、网络节点之间通讯方式:单播、多博和广播
单工、双工、全双工

8.TCP/IP协议
在这里插入图片描述
面试题:
三次握手和四次挥手:
建立一个连接需要三次握手,而终止一个连接要经过四次挥手。
第一次握手:是客户端让服务器准备好资源。
第二次握手:服务端资源准备好了并且服务端问客户端资源有没有准备好。
第三次握手:客户端资源也准备好了。接下来才真正的发生数据。
每次值都加1

第一次,客户端告诉服务端我不会给你发数据了,
第二次服务端告诉客户端我收到你发生的信息了,
第三次服务端给客户端发生数据说我也不给你发了
第四次客户端给服务端说我知道了。

socket函数
socket.socket([family[, type[, proto]]])
参数详解
family 地址系列应为AF_INET(默认值),AF_INET6,AF_UNIX,AF_CAN或AF_RDS。
(AF_UNIX 域实际上是使用本地 socket 文件来通信)
type 套接字类型应为SOCK_STREAM(默认值),SOCK_DGRAM,SOCK_RAW或其他SOCK_常量之一。
SOCK_STREAM 是基于TCP的,有保障的(即能保证数据正确传送到对方)面向连接的SOCKET,多用于资料传送。
SOCK_DGRAM 是基于UDP的,无保障的面向消息的socket,多用于在网络上发广播信息。

下面是socket函数编写QQ聊天程序:
客户端:

在这里插入import socket
client=socket.socket(type=socket.SOCK_DGRAM)#创建一个服务器socket对象
ip_port=(('10.10.42.39',9000))#服务器地址和端口
content=input('我输入的聊天内容:')
content=content.encode('utf-8')#以utf-8编码对u进行编码,获得bytes(二进制)类型对象、encode是字符串函数
client.sendto(content,ip_port)#向服务器发一条信息、client.sendto 发送UDP数据,将数据发送到套接字,address是形式为(ipaddr,port)的元组,指定远程地址。返回值是发送的字节数。
msg,addr=client.recvfrom(1024)#接受从服务器返回的一条信息(client.recvfrom,接收UDP数据,与recv()类似,但返回值是(data,address)。其中data是包含接收数据的字符串,address是发送数据的套接字地址。)
msg=msg.decode('utf-8')
print(msg,addr)#输出代码片

服务端:

在这里import socket
server=socket.socket(type=socket.SOCK_DGRAM)#创建一个服务器socket对象
server.bind(('10.10.42.10',9000))#监听本机9000端口(bind函数将套接字绑定到地址, python下,以元组(host,port)的形式表示地址)
while True:
    msg,addr=server.recvfrom(1024)#接受从客户端发过来的信息,1024是表示一个字节的意思
    msg=msg.decode('utf-8')#
    print('客户%s发给我%s:'%(addr,msg))
    content=input('我回复的信息是:')
    content=content.encode('utf-8')
    server.sendto(content,addr)##有客户端发送消息。
server.close()#插入代码片

猜你喜欢

转载自blog.csdn.net/xmxt668/article/details/88429314