应用层学习笔记七.TCP套接字编程

UDP套接字编程

使用UDP时,必须把目的地址附在分组上。在分组传过发送方的套接字后,因特网使用该目的地址通过因特网为该分组选路到接收进程的套接字。分组到达接收套接字时,接收进程将通过该套接字取回分组。

发送进程为分组附上的目的地址是由目的主机的IP地址和目的地套接字的端口号组成的。

Alt

UDP Client
clientsocket = socket(socket.AF_INET, socket.SOCK_DGRAM)

创建客户套接字,第一个参数指定地址簇,AF_INET说明底层网络使用IPv4。第二个参数指示该套接字是一个SOCK_DGRAM类型的,说明是UDP套接字。

raw_input()Python的内置功能,执行这条命令的时候,用户使用键盘输入一行被放入一个变量中。

clientsocket.sendto(message,(serverName, serverPort))

sendto为报文附上目的地址(serverName, serverPort)并且向进程的套接字clientsocket发送结果分组

modifiedMessage, serverAddress = clientsocket.recvfrom(2048)

serverAddress包括服务器的IP地址和端口号,2048是缓存长度

UDP Server
serverSocket.bind(('',serverPort))

将端口号和服务器的套接字绑定在一起,显式的分配端口号

TCP套接字编程

TCP是一个面向连接的协议,在发送数据之前,TCP连接的一端与客户套接字相联系,另一端与服务器套接字相联系。一侧向另一侧发送数据时,只需经过其套接字将数据丢给TCP连接,而UDP必须附上目的地地址。

  1. 开启服务器进程
  2. 客户进程向服务器发起一个TCP连接(客户程序创建一个TCP套接字)
  3. 客户发起一个三次握手并创建与服务器的TCP连接(三次握手发生在运输层),三次握手的时候服务器进程会有两个套接字
    • 欢迎套接字serverSocket:用于三次连接,所有要与服务器通信的客户的起始接触点
    • 连接套接字connectionSocket:用于对客户进行连接,用于特定客户,与每个客户通信而生成

客户进程可以向其套接字发送任意字节,TCP保证服务器进程能够按照发送的顺序接收。

Alt

TCP Client
clientSocket = socket(AF_INET, SOCK_STREAM)

第一个参数仍然表示使用IPv4,第二个参数指示该套接字时SOCK_STREAM类型,表明是一个TCP套接字。

clientSocket.connect((serverName, serverPort))

发起客户和服务器之间的TCP连接。这行代码执行完后,执行三次握手,并在客户和服务器之间建立起一条TCP连接。

clientSocket.send(sentence)

并未显式的创建一个分组并未该分组附上目的地址,这是区别与UDP的地方,只是将字节放入TCP连接中。

TCP Server
serverSocket.listen(1)

等待客户,聆听来自客户的TCP连接请求。

connectionSocket, addr = serverSocket.accept()

创建了一个称为connectionSocket的新套接字,由特定客户使用,客户和服务器完成了握手,并在客户的clientSocket和服务器的serverSocket之间创建了一个TCP连接,serverSocket需要一直保持打开,connectionSocket在使用完后可关闭。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值