Python socket网络编程

 

1 服务器 客户端架构 C/S架构

server端要求:javascript

1.力求一直提供服务
2. 绑定一个地址,客户可以一直找到

2 OSI七层

数据链路层是 以太网协议
IP是经过子网查找 ARP协议 Mac地址
TCP/UDP 是传输层 找对应的端口

3 SOCKET层

socket是把TCP/IP协议隐藏在Scocket后面css

4 socket工做流程

先从服务器端提及。服务器端先初始化Socket,而后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端链接。在这时若是有个客户端初始化一个Socket,而后链接服务器(connect),若是链接成功,这时客户端与服务器端的链接就创建了。客户端发送数据请求,服务器端接收请求并处理请求,而后把回应数据发送给客户端,客户端读取数据,最后关闭链接,一次交互结束html

打电话模拟socket通讯

服务端java

import socket

phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 买手机
# 解决这个错误 [WinError 10048] 一般每一个套接字地址(协议/网络地址/端口)只容许使用一次。
phone.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
phone.bind(('127.0.0.1', 8888))  # 手机卡 # j加上之后就不用从新
phone.listen(5)  # 手机待机 5至关于挂起的电话链接

print('server is starting...')
while True:
    # conn,addr = phone.accept() # accept()返回的是一个元组,
    conn, addr = phone.accept()  # 等待接听电话
    # print(phone.accept())
    print("电话线路" , conn)
    print("手机的地址" , addr)  # 手机号
    while True:
        try:# 应对Windows系统
            data = conn.recv(1024)  # 从本身的缓存中寻找数据
            if not data:
                continue  # 应对Linux系统
            print("客户发来消息%s" % data)
            conn.send(data)
        except Exception as e:
            break
    conn.close() #挂电话
phone.close()# 关闭手机

''' server is starting... 电话线路 <socket.socket fd=288, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8888), raddr=('127.0.0.1', 1676)> 手机的地址 ('127.0.0.1', 1676) 客户发来消息b'hello' 客户发来消息b'world' '''

客户端node

import socket

phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
phone.connect(('127.0.0.1', 8888))  # 直接链接

while True:
    msg = input(">>>:").strip()
    if not msg:
        continue  # 输入为空的时候 等待
    phone.send(msg.encode('utf-8'))  # 发送的是bytes数据
    data = phone.recv(1024)
    print(data)
phone.close()
''' >>>:hello b'hello' >>>:world b'world' >>>: '''

 

 

 

网络通讯参考http://www.cnblogs.com/linhaifeng/articles/5937962.htmlpython

相关文章
相关标签/搜索