一、基础知识
网络根椐地域面积分为三类:局域网()、城域网(几十公里)、广域网(www)
ip地址由4个8位组成第一个数字不能大于255
IP地址由网络地址+本机地址组成
分为5类:
A类:1.0.0.0~126.255.255.255
前一个是网络地址,后三位是本机地址
(127.0.0.1,localhost是本地回环地址)
B类:128.255.255.255~191.255.255.255
前二两是网络地址,后两个是本机地址
C类:192.255.255.255~223.255.255.255
前三位是网络地址,后一位是本机地址:ee
D类:用于组播
E类:
OSI 七层模型:
1、应用层,表示层、会话层
2、传输层(传输协议):tcp udp
3、网络层
4、数据链路层
5、物理层
查看本机的ip:运行中cmd--------->ipconfig
查看电脑是否可以上网:ping www.baidu.com
端口号:每一种软件用的端口号都是不一样的
什么是网络编程:
网络编程实现计算机与计算机之间的通信
通 过网络编程我们要了解什么问题?通信协议:
tcp:可靠,有状态的,长连接的协议,像打电话一样
udp:不可靠,无连接,像发短信一样。发送的包的顺序要有编号
http:基于tcp协议
ftp:文件传输协议
pop3:邮局协议版本3.是tcp/ip协议族中的一员
smtp:简单邮件传输协议
qq视频发消息
socket套接字进行通信:分为服务器,客户端进行通信,客户端不可以和客户端进行通信,服务器端也要建个socket
实现网络编:
第一步:创建socket对象
第二步:建立连接
第三步:通信
服务器端方法:
s.bind(host,port)绑定地址, s.listen()监听 accept()接收
客户端常用方法:
connect() connect_ex()不抛导常返加错误码------连接服务器
共同方法:
recv 接收tcp数据
send ()发送数据
sendall() 完整发送
close()关闭套接字
服务器接收到客户端服务器建立一个socket
如果想让socket都独立,需要建立线程
下面第一个实例:
(一对一的网络编程)
服务器端代码:
import socket#导入socket模块
s=socket.socket()#创建socket对象
s.bind(('127.0.0.1',8888)) #绑定端口
s.listen(5) #等待客户端边接
print('服务器已启动..........')
c,addr=s.accept() #建立客户端连接
c.send(("欢迎光临").encode('utf-8'))
c.close() #关闭链接
客户端代码:
#客户端
import socket #导入socket模块
s=socket.socket() #创建socket对象
s.connect(('localhost',8888)) #连接服务器
print('客户端已启动')
print(s.recv(1024).decode())
s.close()
实例二(线程通信):
服务器端代码:
import socket
import threading
serversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
serversocket.bind(("localhost",9999))#绑定服务地址和端口号
print("服务器已等待")
serversocket.listen(5)#最多同时接收5个
print("最多同时连接5个客户")
c=serversocket.accept()#接收客户端的连接,些c 是元组,表示得到的客户端的地址和端口
print("正在待待客户端")
#发送和接收单独线程处理
def myrerv(c):
while True:
msg=c[0].recv(1024)
print(msg.decode())
threading._start_new_thread(myrerv,(c,))
def myinput():
while True:
msg=input()
c[0].send(msg.encode())
threading._start_new_thread(myinput())
客户端代码:
import socket
import threading
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(("localhost",9999))
#发送和接收单独线程处理
def myrerv(c):
while True:
msg=c.recv(1024) #接收消息
print((msg.decode()))
threading._start_new_thread(myrerv,(client,))
def myinput():
while True:
msg=input()
client.send(msg.encode())#发送消息的线程
threading._start_new_thread(myinput())