Socket通信原理简介

socket 通信实例
socket接口是操作系统提供的,调用操作系统的接口。当然高级语言一般也封装了好用的函数接口,下面用python代码写一个简单的socket服务端例子:
server.py
import socket

HOST = 'localhost'      # 服务器主机地址
PORT = 5000             # 服务器监听端口
BUFFER_SIZE = 2048      # 读取数据大小

# 创建一个套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
# 绑定主机和端口
sock.bind((HOST, PORT))
# 开启socket监听
sock.listen(5)


print 'Server start, listening {}'.format(PORT)


while True:
    # 建立连接,连接为建立的时候阻塞
    conn, addr = sock.accept()
    while True:
        # 读取数据,数据还没到来阻塞
        data = conn.recv(BUFFER_SIZE)
        if len(data):
            print 'Server Recv Data: {}'.format(data)
            conn.send(data)
            print 'Server Send Data: {}'.format(data)
        else:
            print 'Server Recv Over'
            break
    conn.close()
sock.close()
client.py
import socket

HOST = 'localhost'
PORT = 5000
BUFFER_SIZE = 1024

# 创建客户端套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接到服务器
sock.connect((HOST, PORT))

try:
    message = "Hello"
    # 发起数据给服务器
    sock.sendall(message)
    amount_received = 0
    amount_expected = len(message)
    while amount_received < amount_expected:
        # 接收服务器返回的数据
        data = sock.recv(10)
        amount_received += len(data)
        print 'Client Received: {}'.format(data)

except socket.errno, e:
    print 'Socket error: {}'.format(e)
except Exception, e:
    print 'Other exception: %s'.format(e)
finally:
    print 'Closing connection to the server'
    sock.close()
TCP 三次握手
python代码写套接字很简单。传说的TCP三次握手又是如何体现的呢?什么是三次握手呢?

第一握:首先客户端发送一个syn,请求连接,
第二握:服务器收到之后确认,并发送一个 syn ack应答
第三握:客户端接收到服务器发来的应答之后再给服务器发送建立连接的确定。

用下面的比喻就是

C:约么?
S:约
C:好的
约会

这样就建立了一个TCP连接会话。如果是要断开连接,大致过程是:

上图也很清晰的表明了三次握手的socket具体过程。

客户端socket对象connect调用之后进行阻塞,此过程发送了一个syn。
服务器socket对象调用accept函数之后阻塞,直到客户端发送来的syn,然后发送syn和ack应答
客户端socket对象收到服务端发送的应答之后,再发送一个ack给服务器,并返回connect调用,建立连接。
服务器socket对象接受客户端最后一次握手确定ack返回accept函数,建立连接。

至此,客户端和服务器的socket通信连接建立完成,剩下的就是两个端的连接对象收发数据

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值