网络编程学习一

网络编程

  • Linux:Centos、

    • 服务器:服务别人
  • 网:到处连接

  • 服务器开发:运维

    • 游戏服务器,DOTA2 保存玩家的饰品记录
    • 邮件服务器
    • 视频服务器:youtube,B站
  • 服务器:需要被别人连接

  • 1:联网

  • 2:找别人,别人地址

    • IP:192.168.1.104 唯一 #IPV4
      • 255.255.255.255
      • 客户端没有必要用这个公网IP
      • fe80::d435:5cce:10a3:191f%19
    • 端口:电脑的大门,操作系统虚拟化出来的
  • 服务端:等待别人连接,上门,服务他们

    • 大家都知道的地址,唯一的,告诉大家
    • IP:PORT 一定要告诉大家,率先定义好
  • 客户端:连接服务器,索取资源的

    • IP:可以是任意的
    • PORT:可能是操作系统,网络算法随机使用的
  • 网络环境错综复杂

    • 连接不到别人
    • 地址不存在(不用再走了)
    • 你可以找到,但是别人不让你进(尝试)
    • 走到半路丢了(尝试再走)
  • 公网IP:大家可以通过这个数字字符串,绝对找到你

  • 局域网:只在当前网络下生效

    • 子网掩码
    • 网段
    • 网关
  • TCP:网络中传输数据的协议,打电话

    • 解决了我可能在网络中找不到别人(数据无法传输到)
    • 1:保证数据传输的稳定性,可靠性
    • 2:保证数据的安全性,完整性
    • 3:对方要有响应
      • 尝试重新发送
    • A,B,C
      • A,B,C
      • A,B,C:为了数据顺序,进行数据重组
        • A,C:AC直接回去
    • 三次握手:连接
    • 四次挥手:断开
    • TIMEWAIT:连接中止请求发起之后,并且得到了确认,不会真正断开,还会在等待
      • 2MSL
    • PORT:0~65535
      • Web服务:80
      • 邮箱服务:556
      • 0~1024 不能你用的
    • 套接字:socket
      • IP:PORT,有协议加持
  • UDP:传输数据的协议

    • 不可靠的
    • 只管发
    • 效率非常高,视频流:UDP协议
    • QQ聊天
  • 套接字:绑定了IP属性,协议属性变量

  • import socket
    s = socket.socket(IP是啥,协议是啥)
    	socket.AF_INET ipv4的
    	socket.AF_INET6 ipv6的
    	
    	socket.SOCK_STREAM TCP协议的 流
    	socket.SOCK_DGRAM UDP协议的 报文
    
  • s.bind( (ip,port) )  #绑定可用IP和端口
    	ip可以是一个空字符串,代表所有可用IP
    	公网IP 47.98.190.149
    	私网IP 172.16.253.97
    	本地回环 127.0.0.1 
    虚拟机
    
  • s.listen(5) # 服务器开启监听 
    #参数:连接等待个数
    
  • c,addr = s.accept() # 阻塞 等待别人连接
    c:套接字
    addr:来访者IP和端口的元组
    
  • c.recv(1024)
    	参数:你一次性拿取对方传递来的多少数据,字节单位
    c.send(data.encode())
    	data: 编码过后的字符串对象 (二进制)
    
  • s.close()
    c.close()
    	#关闭套接字
    
  • c.connect( (ip,port) ) #通过IP和端口的元组连接服务器
    
  • 文件描述符:

    • 一个操作系统,一个服务器可以打开的文件个数有限的
    • 我能构成的连接也是有限的
    • DDOS:大规模建立连接 TCP连接
      • 让你无法和别人连接 WEB
  • 阻塞:只要我进去了,别人别想进厕所,一直等到我上完厕所

  • 非阻塞:出来了,真的啥时候想上厕所我在上

  • 打饭:

    • 阻塞:一直等着
    • 非阻塞:先做别的,不停的回来看
  • Vmware centos

  • Atom:写Linux上的代码

实例

  • 服务器代码
import socket
ip = '' #IPV4
port = 8000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind( (ip,port) ) #绑定可用IP和端口
s.listen(5)
print('服务器开启...')
#服务别人
while True:
	try:
		c,addr = s.accept() #阻塞 就等了  没有人连接我,下面的代码不能执行
		# print(addr) #客户端的来访IP和端口元组
		# print(c)
		while True:
			#具体的服务这个c
			data = c.recv(1024) #接收客户端的数据
			if data:
				print('[%s]:%s' % (addr,data.decode('utf-8')))
				msg = input('>>> ')
				c.send(msg.encode('utf-8')) #向客户端返回数据
			else:
				c.close()
				break
	except KeyboardInterrupt:
		s.close()
		break
print('服务器关闭')
#OSError: [Errno 98] Address already in use  立即释放
  • 客户端代码
import socket
ip = '47.98.190.149' #IPV4
port = 8000
c = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
c.connect( (ip,port) ) 

while True: 
	try:
		msg = input('>>> ')
		c.send(msg.encode('utf-8')) #向服务端发送数据
		
		data = c.recv(1024)
		if data:
			print('[服务器]:',data.decode('utf-8'))
		else:
			print('服务端关闭')
			c.close()
			break
	except KeyboardInterrupt: #ctrl + c
		c.close()
		break
#UE: 对比差异
#GUI编程 

#UE: 对比差异
#GUI编程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值