网络编程

一 客户端/服务器架构

应用类:qq等应用

web类:百度网页等

c\s架构 和b\s架构,其实b\s 是c\s架构的一种

osi七层,一般来说将5、6、7看为一层

应用层  负责编辑程序等

传输层 选择通信协议tcp/udp

网络层 给上一步的消息加IP信息

数据链路层  给上一步的东西添加mac地址

物理层 通过网线 网卡的物理介质传输东西 给另一台

 

IP地址可以确认唯一的电脑

端口确定为一个程序

ip+端口 确认唯一机器的唯一程序

可以通过IP地址找到mac地址就是arp协议

建立连接需要三次握手

数据传输需要2次

断开连接需要4次握手

socket层

socket又叫做套接字

套接字是一种具有之前说的通信端点概念的计算机网络数据结构

网络化的程序在开始任何通讯前都必须创建套接字

套接字有两种

一种是文件型应用于同一台电脑上不同程序之间的通讯

另一种是基于网络型的 用于不同电脑

AF_INET是现存的最长用的套接字

套接字地址:主机与端口

合法的端口0~65535

小于1024的端口是系统保留端口,一般用的是8000往上,最熟悉的端口是8080

面向连接, TCP套接字,  指定套接字SOCK_STREAM 整套分块有序传输没有数据边界

无连接  UDP套接字 指定套接字为SOCK_DGRAM 数据宝套接类型的无连接套接字,无需建立连接就可以直接通讯,数据可达顺序,可靠性,不重复性无法保证,数据报是将数据整个发送,无法保证一定可以到达,但是好处是没必要维护虚拟线路等,成本低廉

socket模块函数

tcpsock = socket.socket(socket.AF_INET)  

import socket
tcpsock = socket.socket()
tcpsock.bind(('192.168.13.86',8888))
tcpsock.listen()
conn,addr = tcpsock.accept()
userinfo = True
while userinfo !='bey':
    ret = conn.recv(1024).decode('utf-8')
    if ret == 'bey':
        conn.close()
        break
    print(ret)
    userinfo = input('请输入代码')
    conn.send(bytes(userinfo,encoding='utf-8'))
tcpsock.close()


客户端
import socket
tcpsock = socket.socket()
tcpsock.connect(('127.0.0.1',8888))
userinfo = True
while userinfo != 'bey':
    userinfo= input('请输入内容')
    tcpsock.send(bytes(userinfo,encoding='utf-8'))
    ret = tcpsock.recv(1024).decode('utf-8')
    if ret == 'bey':
        tcpsock.send(b'bry')
        break
    print(ret)
tcpsock.close()

 

posted @ 2018-01-25 18:27  Ebola  阅读(169)  评论(0编辑  收藏  举报